Автор: Пользователь скрыл имя, 06 Февраля 2013 в 01:52, аттестационная работа
Класс TList -- универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются -- эта обязанность лежит на программисте. Приведем доступные ему методы и свойства класса.
DELPHI
Справочник по компонентам.
Класс TList
Класс TList -- универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются -- эта обязанность лежит на программисте. Приведем доступные ему методы и свойства класса:
property Items[Index: Integer]: Pointer; |
Возвращает указатель на содержимое элемента списка с индексом Index. Это свойство является векторным свойством, принимаемым по умолчанию, и его имя можно при записи опускать (см. раздел "Свойства"). |
property Count: Integer; |
Определяет число элементов в списке. |
property Capacity: Integer; |
Определяет максимальное число элементов в списке. Оно может изменяться как явно -- пользователем, так и при добавлении элементов в список, в том случае, когда Count>=Capacity. Максимальная емкость списка -- 16380 элементов. |
Управляют списком следующие методы:
function Add(Item: Pointer): Integer; |
Добавляет в конец списка элемент, который будет равен Item (т. е. указывать на те же данные). |
function Remove(Item: Pointer): Integer; |
Удаляет из списка элемент, который равен Item. |
procedure Insert(Index: Integer; Item: Pointer) ; |
Вставляет элемент, равный Item, перед элементом с индексом Index. |
procedure Delete(Index: Integer); |
Удаляет из списка элемент с индексом Index. |
procedure Clear; |
Очищает список, устанавливая величины Count и Capacity в 0. |
procedure Exchange(Indexl, Index2: Integer); |
Меняет местами элементы списка с индексами Indexl и Index2. |
function Expand: TList; |
При соблюдении равенства Count=Capacity расширяет список. При емкости списка менее пяти элементов, он по умолчанию расширяется на четыре элемента, при пяти-восьми -- на восемь, более восьми -- на шестнадцать. |
function First: Pointer; function Last: Pointer; |
Возвращают значения первого п последнего (с индексом Count-1) элементов списка соответственно. |
function IndexOf(Item: Pointer): Integer; |
Возвращает индекс элемента, равного Item. |
procedure Move(CurIndex, Newlndex: Integer) ; |
Перемещает элемент списка с положения Curlndex в положение Newlndex. |
procedure Pack; |
Упаковывает список, сдвигая элементы к началу на пустующие места. |
Наконец, если приведенных методов почему-либо недостаточно, то свойство
(rc; property List: pPointerList;
pPointerList = ^TPointerList;
TPointerList = array[0..65520 div SizeOf(Pointer)] of Pointer;
возвращает указатель непосредственно на список указателен ((ко) означает, что свойство доступно только для чтения).
2Л3.2. Класс TStrings
Многофункциональный класс, предназначенный для хранения текстовых строк и связанных с ними объектов (любых потомков TObject). TStrings -- абстрактный класс; он только описывает методы работы с наборами строк и сопутствующих им объектов, но как именно они хранятся, на его уровне не определено. Его потомки очень многочисленны; они играют основную роль в компонентах-списках (TListBox, TComboBox), редакторе (TMemo) и других. Так что вам чаще всего придется иметь дело с TStrings как со свойством одного из компонентов. В дальнейшем экземпляры этого класса и порожденных от него классов мы-будем называть наборами строк. Для создания собственных наборов строк вне компонентов предназначен потомок TStrings -- TStringList, который будет рассмотрен ниже.
К строкам и объектам соответственно можно получить доступ через свойства:
property Strings[Index: Integer]: string;
property Objects[Index: Integer]: TObject;
Первое из них является векторным свойством, принимаемым по умолчанию. Общее количество пар в списке равно значению свойства:
(Ro'l property Count: Integer;
Класс TStrings также предназначен для хранения пар вида 'параметр=значение', например, в файлах инициализации (.INI). Эту возможность реализует следующее свойство:
property Values[const Name: string]: string;
При обращении к этому свойству для чтения ищется строка, содержащая подстроку (параметр) Name и символ '='. Если она найдена, возвращается то, что находится в этой строке после '='. Если нет, ValuesfName] равно пустой строке. При записи: если строка, содержащая параметр Name, найдена -- ее значение после '=' заменяется новым значением, если нет -- строка добавляется. Если существующему параметру присваивается пустая строка (Valu-es[Name] := ";), то он удаляется из набора строк.
Методы класса приведены в таблице:
procedure BeginUpdate; procedure EndUpdate; |
Пара процедур, которые устанавливают и сбрасывают флаг обновления набора. Между ними, для ускорения работы, нужно заключать все операции по копированию, удалению и т. д. большого количества элементов. |
procedure Clear; |
Осуществляет полную очистку набора. |
procedure Insert(Index: Integer; const S: string); |
Вставляет строку S под индексом Index. |
procedure Delete(Index: Integer); |
Удаляет строку с индексом Index. |
function IndexOf(const S: string): Integer; |
Возвращает индекс (номер в наборе) строки S. Если она не найдена, функция возвращает -1. |
function IndexOfObject(AObject: TObject): Integer; |
Возвращает индекс объекта в наборе. В случае неудачи возвращает -1. |
function Equals(Strings: TStrings): Boolean; |
Сравнивает строки вызвавшего его объекта со строками объекта Strings и возвращает True в случае равенства (сравниваются число строк и все строки попарно). |
function Add(const S: string): Integer- |
Добавляет строку S в конец набора и в случае успеха возвращает присвоенный ей индекс (он должен быть равен значению Count до добавления строки). |
function AddObject(const S: string; AObject: TObject): Integer; |
Добавляет строку в паре с объектом. Возвращает то же, что и метод Add. |
procedure Exchange(Indexl, Index2: Integer); |
Меняет местами пары строка+объект с индексами Indexl и Index2. |
procedure Move(Curlndex, Newlndex: Integer); |
Перемещает пару строка+объект с позиции Curlndex в позицию Newlndex. |
procedure InsertObject(Index: Integer; const S: string; AObject: TObject); |
Вставляет объект AObject и соответствующую ему строку S в набор под индексом Index. |
Шесть методов предназначены для экспорта/импорта наборов строк:
а) в поток:
procedure LoadFromStream(Stream: TStream);
procedure SaveToStream(Stream: TStream);
б) в файл (создавая поток и вызывая два предыдущих метода):
procedure LoadFrornFile (const FileName: strings-procedure SaveToFile(const FileName: string);
в) в данные в формате текстового редактора (подряд расположенные строки, оканчивающиеся парой символов CR/LF (16-ричные коды SOD/SOA)).
procedure AddScrings(Strings: TStrings! ; |
Добавляет в конец набора другой набор Strings. |
procedure Assign!Source: T'Persisier-t l ; |
Уничтожает прежнее содержимое набора и подставляет вместо него Source, если источник имеет тип TStrings. В противном случае возникает исключительная ситуация EConvertError. |
При этом метод
function GetText: PChar;
выгружает строки в единый массив, где они разделены парами символов CR/LF; в конце такого массива ставится нулевой байт. Размер массива не может превышать 65520 байт; поэтому строки выгружаются до тех пор, пока их суммарная длина не превосходит этого значения.
Метод
procedure SetText(Text: PChar);
читает строки из массива Text. Строки в массиве должны быть отделены друг от друга парой символов CR/LF; допускается и один символ LF (16-ричный код $ОА). Символы с кодами 0, $lA(<Ctrl>+<Z>) воспринимаются как конец текста. При этом прежнее содержимое набора уничтожается.
2.13.3. Класс TStringlist
Этот класс объединяет в себе свойства TStrings и TList простейшим способом -- указатель на объект и соответствующая строка объединяются в запись, указатель на которую хранится в списке. В классе переопределены многие виртуальные методы TStrings: Add, Clear, Delete, Exchange, IndexOf, Insert; он является полностью функциональным и вы можете создавать экземпляры TStringList в своей программе для работы с наборами строк и объектов (помимо тех, которые уже есть в компонентах).
Кроме унаследованных от TStrings, определены дополнительно полезные методы и свойства:
function Find(const S: string; var Index: Integer): Boolean; |
Метод ищет в наборе строку S и в случае успеха возвращает результат True, а в параметре Index -- ее индекс. |
property Sorted: Boolean; |
Свойство -- признак отсортированности элементов (сортировка осуществляется через посимвольное сравнение строк). Установка Sort := True вызывает процедуру сортировки, которую можно вызвать и явно при помощи метода: |
procedure Sort; |
Попытка добавить или вставить элемент в отсортированный список вызывает исключительную ситуацию EListError; в этом случае до выполнения действия свойству Sorted нужно присвоить значение False. |
property Duplicates: TDuplicates; TDuplicates = (duplgnore, dupAccept, dupError); |
Свойство определяет, что происходит при попытке добавить в список дубликат уже имеющейся строки: duplgnore -- добавление игнорируется (отклоняется); dupError -- добавление приводит к созданию исключительной ситуации EListError; dupAccept -- одинаковые строки разрешены. В этом случае при поиске в неотсортированном списке не определено, которая из строк будет найдена первой. |
property OnChange: TNotifyEvent; property OnChanging: TNotifyEvent; |
Два свойства, предусмотренные для определения пользователем своей реакции на изменение данных. Событие OnChanging вызывается во многих рассмотренных выше методах до внесения первого изменения, OnChange -- после последнего. |
Класс TStream
Класс TStream не нов для библиотек фирмы Borland; он и его потомки называются потоками. Со времен появления в библиотеке Turbo Vision он не претерпел существенных изменений, но теперь потоки стали обязательными составными частями там, где нужно прочитать или передать во внешний источник какую-либо информацию.
TStream "является абстрактной моделью совокупности данных, обладающей двумя свойствами -- длиной Size и положением текущего элемента Position:
property Position: Longint;
(Ro) property Size: Longint;
От TStream порождены дочерние объекты, позволяющие пользоваться метафорой потока при работе с файлами, блоками памяти и т. п. Так, в модуле CLASSES описаны классы TMemoryStream и TFileStream.
Данные потока можно читать или записывать, используя предоставляемый буфер, или копировать из другого потока. Эта возможность реализована методами:
function Read(var Buffer; Count: Longint): Longint;
virtual; abstract;
function Writetconst Buffer; Count: Longint): Longint;
virtual; abstract;
Метод
function Seek(0ffset: Longint; Origin: Word): Longint;
virtual; abstract;
позиционирует поток. В зависимости от значения параметра Origin новая позиция выбирается так:
О -- новая позиция равна Offset;
1 --текущая позиция смещается на Offset байт;
2 -- новая позиция находится на Offset байт от конца потока.
Методы
procedure ReadBuffer(var Buffer; Count: Longint);
procedure WriteBuffer(const Buffer; Count: Longint);
представляют собой оболочки над Read/Write, вызывающие в случае неудачи операции исключительные ситуации EReadError/EWriteError.
Метод
function CopyFromfSource: TStream; Count: Longint): Longint;
дописывает к потоку Count байт из потока Source, начиная с его текущей позиции. Если значение Count равно нулю, то дописывается весь поток Source с его начала.
Основным отличием реализации TStream в VCL является введение ряда методов, обеспечивающих чтение и запись компонентов в потоки. Они полезны на уровне разработчика новых компонентов и здесь подробно не рассматриваются:
function ReadComponent(Instance: TComponent): TComponent;
function ReadComponentRes(Instance: TComponent): TComponent;
procedure WriteComponent(Instance: TComponent);
procedure WriteComponentRes (const ResName: string;
Instance: TComponent);
procedure ReadResHeader;
2.14. Справочник по функциям Delphi
В этом разделе мы приведем справочную информацию по функциям, имеющимся в библиотеке времени выполнения Delphi. Они сгруппированы по областям применения. Не рассматриваются:
* функции, содержащиеся в модуле SYSTEM и составляющие неотъемлемую часть самого языка Паскаль. Они не изменялись фирмой Borland уже на протяжении многих версий, и приводить их здесь нет необходимости;
* некоторые функции, относящиеся к тем или иным компонентам и описанные в главе 3 вместе с ними.
Большинство упомянутых здесь функций сосредоточено в модуле SYSUTILS. Для функции, которая относится к другому модулю, приведено его имя.
2.14.1. Функции работы со строками
В Delphi вынужденно уживаются два стандарта работы со строковыми данными. Первый из них, когда длина строки записывается в ее первом байте, традиционен для Паскаля. Ему соответствует тип данных string. Другой подразумевает, что строка заканчивается нулевым символом. Такие строки имеют тип PChar и применяются в основном при обращении к функциям API Windows.
Естественно, для выполнения операций со строками этих типов нужно предусмотреть два различных набора функций, которые и описаны ниже.
Первая таблица содержит функции для работы с типом string. Все перечисленные в ней функции находятся в модуле SYSUTILS.
|
|
function NewStrtconst S: String): PString; |
Создает копию строки S и возвращает указатель на нее. |
procedure DisposeStr(P: PString) ; |
Уничтожает строку, на которую указывает Р. |
procedure AssignStr(var P: PString; const S: strings- |
Уничтожает строку, на которую указывает Р и затем присваивает ему адрес созданной копии строки S. |
procedure AppendStrfvar Dest: string; const S: string); |
Добавляет строку S в конец строки Dest. |
function Uppercase(const S: string): string; |
Преобразует символы 'a'..'z' в строке S к верхнему регистру. |
function LowerCase(const S: string): string; |
Преобразует символы 'A'..'Z' в строке S к нижнему регистру. |
function CompareStr(const SI, S2: string): Integer; |
Сравнивает две строки S1 и S2 с учетом регистра символов. Возвращаемое значение равно 0 в случае равенства строк или разности кодов пары первых несовпадающих символов. |
function CompareText(const SI, S2: string): Integer; |
Сравнивает две строки без учета регистра символов. |
function AnsiUpperCase(const S: string): string; |
Преобразует символы в строке к верхнему регистру с учетом языкового драйвера. |
function AnsiLowerCase(const S: string) : string; |
Преобразует символы в строке к нижнему регистру с учетом языкового драйвера. |
function AnsiCompareStr(const SI, S2: string): Integer; |
Сравнивает две строки с использованием языкового драйвера и с учетом регистра символов. |
function AnsiCompareText(const SI, S2 : string) : Integer; |
Сравнивает две строки с использованием языкового драйвера и без учета регистра символов. |
function IsValidldent(const Ident: string): Boolean; |
Возвращает True, если строка Ident может служить идентификатором в программе на Object Pascal (т. е. содержит только буквы и цифры, причем первый символ -- буква). |
function IntToStr(Value: Longint): string; |
Преобразует целое число в строку. |
function IntToHex(Value: Longint; Digits: Integer): s t r ing ; |
Преобразует целое число в строку с его шестнадцатиричным представлением. |
function StrToInt(const S: string): Longint; |
Преобразует строку в целое число. При ошибке возникает исключительная ситуация EConvertError. |