Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Pascal и Delphi / Иллюстрированный самоучитель по Delphi 6 / Часть II . Язык Object Pascal / Классы общего назначения /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Классы TStrings и TStringlist наборы строк и объектов - Программирование от RIN.RU
Классы TStrings и TStringlist наборы строк и объектов

TStrings


Абстрактный класс TStrings инкапсулирует поля и методы для работы с наборами строк. От него порождены многочисленные специализированные потомки, обслуживающие наборы строк в таких компонентах, как TComboBox, TListBox, TRichEdit и др. Эти классы (TComboBoxStrings, TListBoxStrings, TRichEditStrings и др.) объявляются в разделах Implementation соответствующих модулей (Stdctris, Сomctris и др.) и поэтому скрыты от браузера Delphi и не включены в Help-службу. Единственным доступным наследником TStrings является TStringList - полнофункциональный класс общего назначения.


Замечательной особенностью TStrings и его потомков является то обстоятельство, что элементами наборов служат пары строка-объект, в которых строка - собственно строка символов, а объект - объект любого класса Delphi. Такая двойственность позволяет сохранять в TStrings объекты с текстовыми примечаниями, сортировать объекты, отыскивать нужный объект по его описанию и т. д. Кроме того, в качестве объекта может использоваться потомок от TStrings, что позволяет создавать многомерные наборы строк.


Свойства класса:
property Capacity: Integer; Текущая емкость набора строк
property CommaText: String; Служит для установки или получения всего набора строк в виде единой строки с кавычками и запятыми (см. ниже пояснения) Текущее количество строк в наборе.
property Count: Integer; Интерпретирует все строки списка в виде одной длинной строки
property DelimitedText: String; Каждая строка окружается символами QuoteChar и отделяется от соседней символом Delimiter
property Delimiter: Char; Символ для выделения строк в свойстве DelimitedText
property Names[Index: Integer] : String; Для строки с индексом Index возвращает часть Name, если это строка вида Name=Value, в противном случае возвращает пустую строку
property Objects[Index: Integer] : TObject; Открывает доступ к объекту, связанному со строкой с индексом Index
property QuoteChar: Char; Символ для разделения строк в свойстве DelimitedText
property Strings[Index: Integer] : String; Открывает доступ к строке с индексом Index
property StringsAdapter: TStringsAdapter; Это свойство используется только при разработке компонентов, отвечающих стандарту Activ
property Text: String; Интерпретирует набор строк в виде одной длинной строки с разделителями eoln между отдельными строками набора.
property Values[const Name: String]: String; По части Name отыскивает в наборе и возвращает часть Value для строк вида Name=Value



Набор строк технически реализуется подобно TList - в виде массива указателей. Свойство Capacity показывает текущую длину этого массива, а свойство count - количество элементов, занятых в нем. Если при добавлении очередного элемента capacity окажется меньше count, происходит автоматическое расширение массива. При этом в динамической памяти резервируется место для размещения Capacity + 16 указателей, в новый массив переписывается содержимое старого массива, после чего старый массив уничтожается. Если вам известно количество элементов в создаваемом наборе строк, имеет смысл заранее нужным образом установить свойство capacity, чтобы сократить непроизводительные расходы на многократные расширения массива указателей.


Свойство commaText интерпретирует содержимое набора строк в виде одной длинной строки с элементами вида "первая строка", "вторая строка", "третья строка" и т. д. (каждая строка набора заключается в двойные кавычки и отделяется от соседней строки запятой; если в строке встречается символ '"', он удваивается). Свойство Text интерпретирует содержимое набора в виде одной длинной строки с элементами, разделенными стандартным признаком eoln (#13#10).


Свойства Names И Values обрабатывают строки вида Name=Value.


Такие строки широко используются в различных файлах инициации, например, в файле win. ini.






Методы класса:
function Add(const S: String) : Integer;
function AddObject(const S:String; aObject: TObject):Integer;
Добавляет строку в набор данных и возвращает ее индекс добавляет строку и объект в набор данных
procedure AddStrings( Strings: TStrings); Добавляет к текущему набору новый набор строк
procedure Append(const S:String) ; То же, что Add, но не возвращает индекс вставленной строки
procedure Assign(Source: TPersistent) ;Уничтожает прежний набор строк и загружает из Source новый набор. В случае не удачи возникает исключение EсоnvertError
procedure BeginUpdate; Устанавливает флаг начала обновления. До вызова EndUpdate блокируется сортировка строк, что ускоряет процесс много кратного изменения данных
procedure Clear; Очищает набор данных и освобождает связанную с ним память
procedure Delete(Index: Integer) ;Уничтожает элемент набора с индексом Index и освобождает связанную с ним память
procedure EndUpdate; Сбрасывает флаг изменения и при необходимости сортирует строки
function Equals(Strings:TStrings): Boolean; Сравнивает построчно текущий набор данных с набором Strings и возвращает True, если наборы идентичны
procedure Exchange(Indexl,Index3: Integers;Меняет местами строки с индексами Index1 и Index2. Если объект сортируется, вызывает исключение EstringListError
function GetObject(Index:Integer): TObject; virtual; Возвращает объект, связанный со строкой Index
function GetText: PChar;Загружает строки из единого массива, в котором они отделяются друг от друга признаком EOLN
function IndexOf(const S:String): Integer; Для строки S возвращает ее индекс или -1, если такой строки в наборе нет
function IndexOfName(const Name: String): Integer; Возвращает индекс первой строки вида Name=Value, в которой часть Name совпадает с параметром обращения
function IndexOfObject (aObject: TObject): Integer; Для объекта aObj ect возвращает индекс строки или -1, если такого объекта в наборе нет
procedure Insert(Index: Integer; const S: Strings; Вставляет строку в набор и присваивает ей индекс Index
procedure InsertObject (Index: Integer; const S: String; aObject: TObject) Вставляет строку и объект в набор и присваивает им индекс Index
procedure LoadFromFile (const FileName: Strings; Загружает набор из файла
procedure LoadFromStream (Stream: TStream) ; Загружает набор из потока
procedure Move(Curlndex, Nwlndex: Integers; Перемещает строку из положения Curlndex в положение Newlndex
procedure SaveToFile(const FileName: Strings; Сохраняет набор в файле
procedure SaveToStream (Stream: TStream) ; Сохраняет набор в потоке
procedure SetText(Text:PChar); Выгружает строки в единый массив, в котором они отделяются друг от друга при знаком EOLN



Методы Add, Append, Insert, Clear И Т. П. В классе TStrings - абстрактные. Связано это с тем, что класс инкапсулирует их и таким образом делает доступными во всех потомках, но он при этом не накладывает никаких ограничений на то, как располагаются в памяти строки и объекты. Каждый потомок решает эту задачу наиболее удобным для него способом. Например, потомок TStringList располагает строки и объекты в общей динамической памяти, для чего перекрывает все абстрактные методы своего родителя. Замечу, что? если вы создадите экземпляр класса TStrings с помощью его конструктора Create, компилятор предупредит вас о том, что этот экземпляр содержит абстрактные методы, так что пользоваться им нужно лишь в исключительных случаях.


Вперед  >>>
 1  2 


 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь
motorroar.ru