ГЛАВА 13.СПРАВОЧНИК ПО ОБЪЕКТАМ.
Эта глава содержит алфавитный список всех стандартных объектов
Turbo Vision с объяснением их назначения и использования, с полями,
методами и палитрами цветов.
Чтобы найти информацию по определенному объекту помните, что
многие свойства объектов в иерархии наследуются от предков. Вместо
бесконечного дублирования всей информации эта глава описывает
только поля и методы, которые добавляются или изменяются в этом
объекте.
Например, если Вы хотите найти поле Owner объекта TLabel, Вы
можете посмотреть поля TLabel, среди которых Вы не найдете Owner.
Затем посмотрите непосредственного предка TLabel в иерархии -
TStaticText. Поля Owner нет опять. Посмотрите следующего
непосредственного предка TView. Здесь Вы найдете полную информацию
об Owner, которое наследуется неизменным в TLabel.
Каждый объект в этой главе имеет графическое представление
предков и непосредственных наследников так, что Вы сможете легко
найти объекты, от которых наследуются поля и методы.
Каждый объект представлен в следующем формате:
Объект TSample Модуль объекта
+---------+
| TObject |
+----+----+
+====+====+
| TSample |
+====+====+
+------+------+
| TDescendant |
+-------------+
Поля
Этот раздел приводит список всех полей объекта. Кроме
объявления поля и объяснения его использования приводится
назначение "только чтение" и "чтение/запись". Поля "только
на чтение" - это поля, которые устанавливаются и
поддерживаются методами объектов и которые не должны
использоваться в левой части оператора присваивания.
AField AField: SomeType; Только чтение
AField - это поле, которое содержит некоторую информацию
об этом объекте. Этот текст объясняет как оно
функционирует, что это означает и как Вам его
использовать.
См. так же: Связанные поля, методы, объекты, глобальные
функции и т.д.
AnotherField AnotherField: Word; Чтение/Запись
Это поле содержит информацию подобную информации для поля
AField.
Методы
Этот раздел приводит все методы, которые либо определены в
этом объекте, либо перекрывают унаследованные методы. Для
виртуальных методов указывается, как часто требуется
перекрывать метод: никогда, редко, иногда, часто или
всегда.
Init constructor Init(AParameter: SomeType);
Init создает новый экземпляр объекта, устанавливая поле
AField в АParameter.
Zilch procedure Zilch; virtual; Перекрывается: Иногда
Процедура Zilch выполняет некоторые действия.
См. так же TSomethingElse.Zilch
TApplication App
+----------+
| TObject |
+----+-----+
+----+-----+
| TView |
+----+-----+
+----+-----+
| TGroup |
+-+--+---+-+
+---------+ | +---------+
+----+----+ +----+-----+ +----+-----+
| TWindow | | TDeskTop | | TProgram |
+----+----+ +----------+ +----+-----+
+----+----+ +=====+========+
| TDialog | | TApplication |
+---------+ +==============+
TApplication просто наследуется от TProgram и отличается
от TProgram только констрактором и дестрактором.
TApplication.Init инициализирует все подсистемы Turbo
Vision (управление памятью, видео, событиями, системными
ошибками и списками историй) и затем вызывает
TProgram.Init. Аналогично TApplication.Done вначале
вызывает TProgram.Done, а затем уничтожает все подсистемы
Turbo Vision.
Обычно Вы будете наследовать свои программы от
TApplication. Если Вам потребуется другая
последовательность инициализации подсистем и их закрытия,
Вы можете наследовать Вашу программу от TProgram и вручную
инициализировать и закрывать подсистемы Turbo Vision.
Методы
Init constructor Init;
Фактическая реализация TApplication.Init показана ниже:
constructor TApplication.Init;
begin
InitMemory;
InitVideo;
InitEvents;
InitSysError;
InitHistory;
TProgram.Init;
end;
См. так же: TProgram.Init
Done destructor Done; virtual;
Реализация TApplication.Done показана ниже:
destructor TApplication.Done;
begin
TProgram.Done;
DoneHistory;
DoneSysError;
DoneEvents;
DoneVideo;
DoneMemory;
end;
TBackground App
+-------------+
| TObject |
+------+------+
+------+------+
| TView |
+------+------+
+======+======+
| TBackGround |
+=============+
TBackground - это простой видимый элемент, содержащий
однотонно заполненный прямоугольник. Обычно он принадлежит
TDeskTop.
Поля
Pattern Pattern: Char; Только чтение
Это битовый шаблон для фона видимого элемента.
Методы
Init constructor Init(var Bounds: TRect; APattern: Char);
Создает объект TBackground с границами Bounds вызывая
TView.Init. GrowMode устанавливается в gfGrowHiX +
gfGrowHiY, а поле Pattern устанавливается в APattern. См.
так же: TView.Init, TBackground.Pattern
Load constructor Load(var S: TStream);
Создает объект TBackground и загружает его из потока S,
вызывая TView.Load, а затем читая поле Pattern.
См. так же: TView.Load
Draw procedure Draw; virtual; Перекрывается: Редко
Заполняет прямоугольник видимого элемента текущим шаблоном
с цветом по умолчанию.
GetPalette function GetPalette: PPalette; virtual;
Перекрывается: Редко
Возвращает указатель на палитру по умолчанию CBackground.
Store procedure Store(var S: TStream);
Сохраняет видимый элемент TBackground в потоке, вызывая
TView.Store, а затем записывая поле Pattern.
См. так же: TView.Store, TBackground.Load
Палитра
Объекты фона используют по умолчанию палитру CBackground
для отображения в первый элемент палитры программы.
1
+===+
CBackground | 1 |
+=+=+
Color ----+
TBufStream Objects
+------------+
| TObject |
+------+-----+
+------+-----+
| TStream |
+------+-----+
+------+-----+
| TDosStream |
+------+-----+
+======+=====+
| TBufStream |
+============+
TBufStream реализует буферизованную версию TDosStream.
Дополнительные поля указывают размер и положение буфера, а
так же текущую и последнюю позицию в буфере. Кроме
перекрытия восьми методов TDosStream, TBufStream
определяет абстрактный метод TStream.Flush. Констрактор
TBufStream создает и открывает файл, вызывая
TDosStream.Init, затем создает буфер с помощью GetMem.
TBufStream значительно эффективнее TDosStream при работе
большого числа небольших данных в поток, а так же при
сохранении и загрузке объектов с использованием
TStream.Get и TStream.Put.
Поля
Buffer Buffer: Pointer; Только чтение
Указатель на начало буфера потока.
BufSize BufSize: Word; Только чтение
Размер буфера в байтах.
BufPtr BufPtr: Word; Только чтение
Смещение от указателя Buffer, указывающее на текущую
позицию внутри буфера.
BufEnd BufEnd: Word; Только чтение
Если буфер не заполнен, BufEnd дает смещение от указателя
Buffer на последний используемый байт в буфере.
Методы
Init constructor Init(FileName: FNameStr; Mode, Size: Word);
Создает и открывает файл с режимом доступа Mode, вызывая
TDosStream.Init. Так же создает буфер размером в SizeBuf,
вызывая GetMem. Handle, Buffer и BufSize инициализируются
соответственно. Типичный размер буфера от 512 до 2048
байт.
См. так же: TDosStream.Init
Done destructor Done; virtual; Перекрывается: Никогда
Закрывает и освобождает файловый поток; выталкивает и
освобождает его буфер.
См. так же: TBufStream.Flush
Flush procedure Flush; virtual; Перекрывается: Никогда
Выталкивает буфер потока, обеспечивая, что поток будет в
состоянии stOK.
См. так же: TBufStream.Done
GetPos function GetPos: LongInt; virtual; Перекрывается: Никогда
Возвращает значение текущей позиции потока (не перепутайте
с BufPtr - текущей позицией в буфере).
См. так же: TBufStream.Seek
GetSize function GetSize: LongInt; virtual; Перекрывается: Никогда
Выталкивает буфер, а затем возвращает общее число байт в
потоке.
Read procedure Read(var Buf; Count: Word); virtual;
Перекрывается: Никогда
Если stOK, читает Count байт в буфер Buf, начиная с
текущей позиции потока.
Заметим, что Buf - это не буфер потока, а внешний буфер,
содержащий данные читаемые из потока.
См. так же: TBufStream.Write, stReadError
Seek procedure Seek(Pos: LongInt); virtual;
Перекрывается: Никогда
Выталкивает буфер, а затем устанавливает текущую позицию в
Pos байт от начала потока. Начальная позиция потока - 0.
См. так же: TBufStream.GetPos, TBufStream.GetSize
Truncate procedure Truncate; virtual; Перекрывается: Никогда
Выталкивает буфер, затем удаляет все данные потока от
текущей позиции до конца потока. Текущая позиция
устанавливается в новый конец потока.
См. так же: TbufStream.GetPos, TBufStream.Seek
Write procedure Write(var Buf; Count: Word); virtual;
Перекрывается: Никогда
Если stOK, записывает Count байт из буфера Buf в поток,
начиная с текущей позиции.
Заметим, что Buf - это не буфер потока, а внешний буфер,
содержащий данные, записываемые в поток. Когда Write
вызывается, Buf указывает на переменную, чье значяение
записывается.
См. так же: TBudStream.Read, stWriteError
TButton Dialogs
+-----------+
| TObject |
+-----+-----+
+-----+-----+
| TView |
+-----+-----+
+=====+=====+
| TButton |
+===========+
Объект TBuuton - это прямоугольник с заголовком и тенью,
генерирующий команду при нажатии. Эти кнопки интенсивно
используются в IDE. Кнопка может быть выбрана нажатием
подсвеченной буквы, переходом на кнопку с помощью Tab и
нажатием пробела, нажатием Enter, когда кнопка по
умолчанию (указывается подсветкой) или отметкой кнопки
мышкой.
При цветной и черно-белой палитрах кнопка имеет трехмерный
вид, который изменяется при нажатии. На монохромных
системах кнопка выделена стрелками и другие ASCII символы
используются для указания, является ли кнопка по умолчанию
выбранной и т.д.
Как и другие элементы управления, определенные в модуле
Dialogs, TButton - это терминальный объект. Он может быть
вставлен в любую группу и использован без перекрытия его
методов.
Кнопка инициализируется передачей ей TRect строки
заголовка, команды, генерируемой при нажатии кнопки и
байта флагов. Чтобы определить для кнопки клавишу
короткого набора, строка заголовка может содержать "~"
вокруг одного из символов, который становится символом
короткого набора. Параметр AFlag указывает, будет
заголовок центрироваться или выравниваться по левой
границе и должна ли кнопка быть умалчиваемой (и
следовательно выбираться через Enter).
Вы можете установить в окне или диалоговом окне только
одну кнопку по умолчанию в любой момент времени. Кнопки,
которые равны в группе, получают и отдают умалчиваемое
состояние через сообщения evBroadcast. Кнопки могут быть
разрешены или запрещены с использованием методов SetState
и CommandEnabled.
Поля
Title Title: PString; Только чтение
Указатель на текст кнопки.
Command Commаnd: Word; Только чтение
Слово команды в событии, генерируемом при нажатии кнопки.
См. так же: TButton.Init, TButton.Load
Flags Flags: Byte; Чтение/Запись
Flags - это поле, используемое для указания, будет ли
текст кнопки центрироваться или выравниваться влево.
Отдельные флаги описаны в разделе "Константы флага кнопки
bfXXXX" главы 14.
См. так же: TButton.Draw, константы bfXXXX
AmDefault AmDefault: Boolean; Только чтение
Если True, кнопка - по умолчанию (и следовательно
выбирается при нажатии Enter). Иначе - это "нормальная"
кнопка.
См. так же: Константы флага кнопки bfXXXX
Методы
Init constructor Init(var Bounds: TRect; ATitle: TTitleStr;
ACommand: Word; AFlags: Byte);
Создает объект TButton с заданным размером, вызывая TView.
Init. Вызывается NewStr(ATitle) и назначается в Title.
AFlags используется в двух целях: если AFlags and
bfDefault - не 0, то AmDefault устанавливается в True;
кроме того, AFlags указывает, будет заголовок
центрироваться или выравниваться влево проверкой если
AFlags and bfLeftJust не 0.
Options устанавливается в (ofSelectable + ofFirstClick +
ofPreProcess + ofPostProcess). EventMask устанавливается в
evBroadсast. Если данная ACommand не разрешена, в поле
State устанавливается sfDisabled.
См. так же: TView.Init, константы флага кнопки bfXXXX
Load constructor Load(var S: TStream);
Создает объект TButton и инициализирует его из заданного
потока, вызывая TView.Load(S). Другие поля устанавливаются
через вызовы S.Read, а State устанавливается в
соответствии с тем, разрешена ли команда в поле Command.
Используется совместно с TButton.Store для сохранения и
получения объекта в TButton из TStream.
См. так же: TView.Load, TButton.Store
Done destructor Done; virtual; Перекрывается: Никогда
Освобождает память, распределенную под Title, затем
вызывает TView.Done для разрушения видимого элемента.
См. так же: TView.Done
Draw procedure Draw; virtual; Перекрывается: Редко
Рисует кнопку соответствующей палитрой для ее текущего
состояния (нормальная по умолчанию запрещена) и
позиционирует метку в соответствии с битом bfLeftJust поля
Flags.
GetPalette function GetPalette: PPalette; virtual;
Перекрывается: Иногда
Возвращает указатель на палитру по умолчанию CButton.
HandleEvent procedure HandleEvent(var Event: TEvent); virtual;
Перекрывается: Иногда
Отвечает на нажатие одним из трех способов: отметкой
кнопки мышкой, нажатием короткой клавиши или становится
кнопкой по умолчанию, когда получено общее сообщение
cmDefault. Когда кнопка нажата, генерируется командное
событие с TView.PutEvent, с полем TButton.Command:
установленным в Event.Command, а Event.InfoPtr
установленным в @Self.
Кнопки так же распознают общие команды cmGrabDefault и
cmReleaseDefault, чтобы стать или "не стать" кнопкой по
умолчанию и cmCommandSetChanged, которая заставляет их
проверять, разрешены команды или запрещены.
См. так же: TView.HandleEvent
MakeDefault procedure MakeDefault(Evable: Boolean);
Этот метод ничего не делает, если кнопка уже умалчиваемая.
Иначе говорит Owner в кнопке измениться в состояние по
умолчанию. Если Enable True, выдается общая команда
cmGrebDefault, иначе cmReleaseDefault. Кнопка
перерисовывается, чтобы показать новый статус.
См. так же: TButton.AmDefault, bfDefault
SetState procedure SetState(AState: Word; Enable: Boolean);
virtual; Перекрывается: Редко
Вызывает TView.SetState, затем рисует кнопку, если кнопка
стала sfSelected или sfActive. Если она стала активной (т.
е. если AState - sfFocused) кнопка забирает или отдает
состояние по умолчанию кнопке по умолчанию, вызывая
MakeDefault.
См. так же: TCView.SetState, TButton.MakeDefault
Store procedure Store(var S: TStream);
Сохраняет объект TButton в потоке, вызывая TView.Store(S),
а затем S.Write для сохранения значений Title и Command.
Используется совместно с TButton.Load для сохранения и
получения объектов TButton из потока. См. так же:
TView.Store, TButton.Load, TStream.Write
Палитра
Объект кнопка использует палитру по умолчанию CButton для
отображения элементов от 10 до 15 в палитру CDialog.
1 2 3 4 5 6 7 8
+====+====+====+====+====+====+====+====+
CButton | 10 | 11 | 12 | 13 | 14 | 14 | 14 | 15 |
+==+=+==+=+==+=+==+=+==+=+==+=+==+=+=+==+
Нормальный --+ | | | | | | + Тень
текст | | | | | |
Текст по ------+ | | | | +---- Выбранная
умолчанию | | | | короткая клавиша
Выбранный ----------+ | | +--------- Короткая клавиша
текст | | по умолчанию
Запрещенный ---------------+ +-------------- Выбранная
текст нормальная
клавиша
TCheckBoxes Dialogs
+------------+
| TObject |
+------+-----+
+------+-----+
| TView |
+------+-----+
+------+-----+
| TCluster |
+----+---+---+
+--------+ +-------+
+-------+-------+ +======+======+
| TRadioButtons | | TCheckBoxes |
+---------------+ +=============+
TCheckBoxes - это кластер, содержащий от 1 до 16 элементв
управления. В отличие от зависимых кнопок, любое число
независимых кнопок может быть установлено независимо.
Поэтому в этой группе нет кнопки по умолчанию. Кнопки
можно отмечать мышкой, движением курсора и коротким
нажатием Alt-буква. Каждая кнопка может быть подсвечена и
включена/выключена (пробелом). Если кнопка выбрана,
появляется Х. Другие части Вашей программы обычно
проверяют состояние независимых кнопок для определения,
какая опция выбрана пользователем (например в IDE опции
компилятора и редактора выбираются таким способом).
Кластеры независимых кнопок часто связаны с объектами
TLabel.
Поля
Наследуют поля ValueSl от TCluster. Value интерпретируется
как набор из 16 бит (от 0 до 15), где 1 в бите позиции
означает, что соответствующий элемент отмечен.
Методы
Заметим, что TCheckBoxes не перекрывает констракторов,
дестрактора и обработчика событий TCluster. Порожденные
типы объектов могут однако перекрыть их.
Draw procedure Draw; virtual; Перекрывается: Редко
Рисует объект TCheckBoxes вызывая наследуемый метод
TCluster.DrawBox. По умолчанию независимая кнопка имеет
вид: " [ ] " когда не выбрана и " [X] " когда выбрана.
Заметим, что если границы видимого элемента достаточно
велики, независимые кнопки могут отображаться в несколько
колонок.
См. так же: TCluster.DrawBox
Mark function Mark(Item: Integer) : Boolean; virtual;
Перекрывается: Редко
Возвращает True, если бит элемента в Value установлен,
т.е. если данная кнопка отмечена. Вы можете перекрыть это,
установив другую интерпретацию поля Value. По умолчанию
элементы нумеруются от 0 до 15.
См. так же: TCheckBoxes.Press
Press procedure Press(Item: Integer); virtual;
Перекрывается: Редко
Устанавливает бит элемента в Value. Вы можете перекрыть
его для другой интерпретации поля Value. По умолчанию
элементы нумеруются от 0 до 15.
См. так же: TCheckBoxes.Mark
Палитра
По умолчанию объекты независимых кнопок используют
CCluster - палитру по умолчанию для всех
объектов-кластеров.
1 2 3 4
+====+====+====+====+
CCluster | 16 | 17 | 18 | 18 |
+==+=+==+=+==+=+==+=+
Нормальный ----+ | | +--- Выбранная короткая
текст | | клавиша
Выбранный -------+ +-------- Нормальная короткая
текст клавиша
TCluster Dialogs
+------------+
| TObject |
+------+-----+
+------+-----+
| TView |
+------+-----+
+======+=====+
| TCluster |
+====+===+===+
+--------+ +-------+
+-------+-------+ +------+------+
| TRadioButtons | | TCheckBoxes |
+---------------+ +-------------+
Кластер - это группа элементов управления, которые
откликаются одинаково. TCluster - это абстрактный тип
объекта, из которого порождаются группы элементов
управления TRadioButtons и TCheckBoxes. Элементы
управления кластера часто ассоциируются с объектами
TLabel, позволяя Вам выбирать элемент управления, выбирая
дополнительную метку с объяснением.
В то время, как кнопки используются для генерации команд,
а строки ввода - для редактирования строк, кластеры
используются для переключения битовых значений поля Value
(типа Word). Стандартные наследники TCluster используют
различные алгоритмы изменения Value: TCheckBoxes просто
переключает бит, а TRadioButtons включает один бит и
очищает предварительно выбранный бит. Оба объекта
наследуют почти все свое поведение от TCluster.
Поля
Value Value: Word; Только чтение
Текущие значения элемента управления. Действительнвый
смысл этого поля определяется методами, разработанными в
типах объектов, порожденных от TCluster.
Sel Sel: Integer; Только чтение
Текущий выбранный элемент кластера.
Strings Strings: TStringCollection; Только чтение
Список элементов кластера.
Методы
Init constructor Init(var Bounds: TRect; AStrings: PSItem);
Очищает поля Value и Sel. Параметр AStrings обычно
выполняет серию вложенных вызовов глобальной функции
NewSItem. Таким образом весь кластер зависимых или
независимых кнопок может быть создан одним вызовом
констрактора:
var
Control: PView;
.
R.Assign(30, 5, 52, 7);
Control := New(PRadioButtons, Init(R,
NewSItem('~F~orward',
NewSItem('~B~ackward', nil))));
.
Когда в кластер добавляются дополнительные зависимые или
независимые кнопки, просто копируется первый вызов
NewSItem и заголовок заменяется требуемым текстом. Затем
добавляется дополнительная закрывающая скобка для каждой
новой добавленной строки и оператор будет компилироваться
без синтаксических ошибок.
См. так же: тип TSItem
Load constructor Load(var S: TStream);
Создает объект TCluster, вызывая TView.Load(S), затем
устанавливает поля Value и Set вызовом S.Read. Наконец
поле String кластера загружается из S с помощью
Strings.Load(S). Используется совместно с TCluster.Store
для сохранения и получения объектов TCluster из потока.
См. так же: TCluster.Store, TView.Load
Done destructor Done; virtual; Перекрывается: Иногда
Освобождает память, распределенную под строку кластера,
затем разрушает видимый элемент, вызывая TView.Done.
См. так же: TView.Done
DataSize function DataSize: Word; virtual; Перекрывается: Редко
Возвращает размер Value. Должен перекрываться в
порожденных типах объектов, которые изменяют Value или
добавляют другие поля данных для того, чтобы работать с
GetData и SetData.
См. так же: TCluster.GetData, TCluster.SetData
DrawBox procedure DrawBox(Icon: String; Maker: Char);
Вызывается методом Draw порожденного типа, чтобы рисовать
прямоугольник перед строкой для каждого элемента кластера.
Icon - это строка из 5 символов (' [ ] ' для независимых и
' ( ) ' для зависимых кнопок). Maker - это символ,
используемый для указания, что кнопка отмечена ('X' для
зависимых и '.' для независимых кнопок).
См. так же: TCheckBoxes.Draw, TRadioButtons.Draw
GetData procedure GetData(var Rec); virtual; Перекрывается: Редко
Записывает поле Value в данную запись и рисует кластер.
Должен перекрываться в порожденных типах объектов, которые
изменяют поле Value для того, чтобы работать с DataSize и
SetData.
См. так же: TCluster.DataSize, TCluster.SetData,
TView.DrawView
GetHelpCtx function GetHelpCtx: Word; virtual; Перекрывается:Редко
Возвращает значение Sel добавленное к HelpCtx. Это
позволяет Вам задать отдельную констекстную справку для
каждого элемента кластера. Допустимый диапазон контекстов
равен HelpCtx плюс число элементов кластера минус 1.
GetPalette function GetPalette: PPalette; virtual;
Перекрывается: Иногда
Возвращает указатель на палитру по умолчанию CCLuster.
HandleEvent procedure HandleEvent(var Event: TEvent); virtual;
Перекрывается: Редко
Вызывает TView.HandleEvent, который обрабатывает все
события от мышки и клавиатуры, относящиеся к этому
кластеру. Элементы управления выбираются отметкой мышки
или клавишами движения курсора (включая Пробел). Кластер
перерисовывается, чтобы показать выбранные элементы.
См. так же: TView.HandleEvent
Mark function Mark(Item: Integer): Boolean; virtual;
Перекрывается: Всегда
Вызывается из Draw для определения, какие элементы
отмечены. По умолчанию TCluster.Mark возвращает False.
Mark должен перекрываться, возвращая True, если элемент
управления в кластере отмечен, иначе False.
MovedTo procedure MovedTo(Item: Integer); virtual;
Перекрывается: Редко
Вызывается из HandleEvent для перемещения полосы выбора на
заданный элемент управления в кластере.
Press procedure Press(Item: Integer); virtual;
Перекрывается: Всегда
Вызывается из HandleEvent когда элемент управления в
кластере нажат либо отметкой мышки, либо событием от
клавиатуры. Этот абстрактный метод должен быть перекрыт.
SetData procedure SetData(var Rec); virtual; Перекрывается: Редко
Читает поле Value из данной записи и перерисовывает
кластер. Должен перекрываться в порожденных типах
кластеров, которые требуют другие поля для работы с
DataSize и GetData.
См. так же: TCluster.DataSize, YCluster.GetData,
TView.DrawView
SetState procedure SetState(AState: Word; Enable: Boolean);
virtual; Перекрывается: Редко
Вызывает TView.SetState, затем рисует кластер, если AState
- sfSelected.
См. так же: TView.SetState, TView.DrawView
Store procedure Store(var S: TStream);
Сохраняет объект TCluster в потоке, вызывая
TView.Store(S), записывает Value и Sel, затем сохраняет
поле Strings кластера, используя его метод Store.
Используется совместно с TCluster.Load для сохранения и
получения объектов TCluster из потока.
См. так же: TCluster.Load, TStream.Write
Палитра
Объекты TCluster используют CCluster - палитру по
умолчанию для всех объектов кластера, чтобы отобразить
элементы с 16 по 18 в палитру стандартного диалогового
окна:
1 2 3 4
+====+====+====+====+
CCluster | 16 | 17 | 18 | 18 |
+==+=+==+=+==+=+==+=+
Нормальный ----+ | | +--- Выбранная короткая
текст | | клавиша
Выбранный -------+ +-------- Нормальная короткая
текст клавиша
TCollection Objects
+---------+
| TObject |
+----+----+
+======+======+
| TCollection |
+======+======+
+---------+---------+
| TSortedCollection |
+---------+---------+
+---------+---------+
| TStringCollection |
+---------+---------+
+----------+----------+
| TResourceCollection |
+---------------------+
TCollection - это абстрактный тип для реализации любой
коллекции элементов, включая другие объекты. TCollection
это намного более общая концепция, чем обычные массив,
множество или список. Размер объектов TCollection
динамически устанавливается во время выполнения и
TCollection - базовый тип для многих специализированных
типов, таких как TSortedCollection, TStringCollection и
TResourceCollection. В дополнение к методам добавления и
удаления элементов TCollection представляет несколько
итераторных программ, которые вызывают процедуру или
функцию для каждого элемента коллекции.
Поля
Items Items: PItemList; Только чтение
Указатель на массив указателей элементов.
См. так же: тип TItemList
Count Count: Integer; Только чтение
Текущее число элементов в коллекции, максимально
MaxCollectionSize.
См. так же: переменная MaxCollectionSize
Limit Limit: Integer; Только чтение
Текущий распределенный размер (в элементах) списка Items.
См. так же: Delta, TCollection.Init
Delta Delta: Integer; Только чтение
Число элементов, на которое увеличивается список Items при
заполнении. Если Delta - 0, коллекция не может расти выше
размера, установленного в Limit.
Примечание: Увеличение размера коллекции достаточно дорого
в смысле производительности. Чтобы минимизировать число
раз когда это происходит, попытайтесь установить начальное
Limit в такое количество, которое будет достаточно для
всех элементов, которые Вы собираетесь коллекционировать,
и установите Delta так, чтобы она позволяла расширение на
приемлемое количество.
См. так же: Limit, 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);
Создает и загружает коллекцию из потока. TCollection.Load
вызывает GetItem для каждого элемента коллекции.
См. так же: TCollection.GetItem
Done destructor Done; virtual; Перекрывается: Часто
Удаляет и освобождает все элементы коллекции, вызывая
TCollection.FreeAll и устанавливая Limit в 0.
См. так же: TCollection.FreeAll, TCollection.Init
At function At(Index: Integer) : Pointer;
Возвращает указатель на элемент с индексом Index в
коллекции. Этот метод позволяет Вам интерпретировать
коллекцию как индексированный массив. Если индекс меньше 0
или больше или равно Count, вызывается метод Error с
аргументом coIndexError и возвращается значение nil.
См. так же: TCollection.IndexOf
AtDelete procedure AtDelete(Index: Integer);
Удаляет элемент в позиции Index и перемещает следующие
элементы на одну позицию вверх. Count уменьшается на 1, но
память, распределенная под коллекцию (как задано в Limit)
не сокращается. Если Index меньше 0 или больше или равно
Count, вызывается метод Error с аргументом coIndexError.
См. так же: TCollection.FreeItem, TCollection.Free,
TCollection.Delete
AtInsert procedure AtInsert(Index: Integer; Item: Pointer);
Вставляет Item в позицию Index и передвигает следующие
элементы на одну позицию вниз. Если Index меньше 0 или
больше Count, вызывается метод Error с аргументом
coIndexError и новый Item не вставляется. Если Count равен
Limit до вызова AtInsert, распределенный размер коллекции
расширяется на Delta элементов, вызывая SetLimit. Если
вызов SetLimit не может расширить коллекцию, вызывается
метод Error с аргументом coOverflow и новый Item не
вставляется.
См. так же: TCollection.At, TCollection.AtPut
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)).
См. так же: TCollection.AtDelete, TCollection.DeleteAll
DeleteAll procedure DeleteAll;
Удаляет все элементы из коллекции, устанавливая Count в 0.
См. так же: TCollection.Delete, TCollection.AtDelete
Error procedure Error(Code, Info: Integer); virtual;
Перекрывается: Иногда
Вызывается, когда встречается ошибка коллекции. По
умолчанию этот метод генерирует ошибку времени выполнения
212.
См. так же: константы коллекции coXXXX
FirstThat function FirstThat(Test: Pointer) : Pointer;
FirstThat применяет булевскую функцию, заданную указателем
на функцию Test к каждому элементу коллекции до тех пор,
пока test возвращает True. Результат - указатель на
элемент, для которого Test возвращает True, или nil, если
функция Test возвращает False для всех элементов. Test
должна указывать на дальнюю локальную функцию,
использующую только один параметр типа 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 должен указывать на локальную дальнюю процедуру,
использующую один параметр типа Pointer. Например
function PrintItem(Item: Pointer);
Процедура 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. Эквивалентно
FreeItem(Item);
Delete(Item);
См. так же: TCollection.FreeItem, TCollection.Delete
FreeAll procedure FreeAll;
Удаляет и освобождает все элементы коллекции.
См. так же: TCollection.DeleteAll
FreeItem procedure FreeItem(Item: Pointer); virtual;
Перекрывается: Иногда
Метод FreeItem должен освобождать Item. По умолчанию
TCollection.FreeItem предполагает, что Item - это
указатель на объект, порожденный от TObject и поэтому
вызывает дестрактор Done:
if Item <> nil then dispopse(PObject(Item), Done);
FreeItem вызывается из Free и FreeAll, но никогда не
должен вызываться прямо.
См. так же: TCollection.Free, TCollection.FreeAll
GetItem function TCollection.GetItem(var S: TStream): Pointer;
virtual; Перекрывается: Иногда
Вызывается из TCollection.Load для каждого элемента
коллекции. Этот метод может быть перекрыт, но не должен
вызываться напрямую. По умолчанию TCollection.GetItem
предполагает, что элементы коллекции порождены от TObject
и вызывает TString.Get для загрузки элемента:
GetItem := S.Get;
См. так же: 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 должен указывать на дальнюю локальную
функцию, использующую один параметр типа Pointer и
возвращающую типа Boolean, например
function Patches(Item: Pointer): Boolean; far;
Функция Test не может быть глобальной функцией.
Если List типа TCollection, оператор
P := List.LastThat(@Matches);
соответствует
I := List.Count - 1;
while (I >= 0) and 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, TCollection.DeleteAll
PutItem procedure PutItem(var S: TStream; Item: Pointer); virtual;
Перекрывается: Иногда
Вызывается из TCollection.Store для каждого элемента
коллекции. Этот метод может быть перекрыт, но не должен
вызываться прямо. По умолчанию TCollection.PutItem
предполагает, что элементы коллекций порождаются от
TObject и вызов TString.Put сохраняет элемент:
S.Put(Item);
См. так же: TCollection.GetItem, TCollection.Store,
TCollection.Load
SetLimit procedure SetLimit(ALimit: Integer); virtual;
Перекрывается: Редко
Расширяет или сокращает коллекцию, изменяя распределенный
размер в ALimit. Если ALimit меньше Count, он
устанавливается в Count, и если ALimit больше
MaxCollectionSize, он устанавливается в MaxCollectionSize.
Кроме того, если ALimit отличается от текущего Limit,
распределяется новый массив Items из Alimit элементов,
старый массив Items копируется в новый массив и старый
массив освобождается.
См.так же: TCollection.Limit, TCollection.Count,
переменная MaxCollectionSize
Store procedure Store(var S: TStream);
Сохраняет коллекцию и все ее элементы в потоке S.
TCollection.Store вызывает TCollection.PutItem для каждого
элемента коллекции.
См. так же: TCollection.PutItem
Назад | Содержание | Вперед