Студопедия — КЛАССЫ TSTRINGS И TSTRINGLIST -НАБОРЫ СТРОК И ОБЪЕКТОВ
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

КЛАССЫ TSTRINGS И TSTRINGLIST -НАБОРЫ СТРОК И ОБЪЕКТОВ






16.3.1. 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; Это свойство используется только при разработке компонентов, отвечающих стандарту Act iv
property Text: String; Интерпретирует набор строк в виде одной длинной строки с разделителями eoln между отдельными строками набо
property Values[const Name: String]: String; По части Name отыскивает в наборе и возвращает часть Value для строк вида Name=Valu

Набор строк технически реализуется подобно 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: In teger; 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, компилятор предупредит вас о том, что этот экземпляр содержит абстрактные методы, так что пользоваться им нужно лишь в исключительных случаях.

16.3.2. TStringList

TStringList представляет собой полнофункциональный класс общего назначения и является прямым потомкам TStrings. Помимо перекрытых абстрактных методов своего родителя класс включает в себя такие дополнительные методы и свойства:

property Duplicates: TDu-plicates; Свойство, позволяющее управлять возможностью размещения в наборе двух и более идентичных строк
property Sorted: Boolean; Признак необходимости сортировки строк в алфавитном порядке
property OnChange: TNotifyEvent;; Определяет реакцию на изменение набора строк. Возникает после последнего изменения
property OnChanging: TNotifyEvent Определяет реакцию на изменение набора строк. Возникает до очередного изменения
function Find(const S:String; var Index: Integer): Boolean; Ищет в наборе строку S и в случае успеха в параметре index возвращает ее индекс

При sorted = True строки набора автоматически сортируются в алфавитном порядке. При этом свойство Duplicates разрешает коллизию, связанную с добавлением в набор строки, идентичной одной из ранее вставленных. Если Duplicates = dulgnore, идентичная строка отвергается и программе ничего об этом не сообщается; если Duplicates = duError, возбуждается исключение EListError; значение Duplicates = duAccept разрешает вставлять в набор сколько угодно идентичных строк.

Следует заметить, что сортировка строк в Windows 32 осуществляется не совсем так, как это происходит в MS-DOS или Windows 3-х. Чтобы убедиться в этом, советую прогнать следующий вариант учебной программы (см. рис. 16.1). В ней обработчик события OnClick кнопки bbRun создает два списка строк - List1и List2. Список List1 первоначально способен сортировать строки (в его свойство sorted устанавливается значение True). Затем в цикле от 32 до 255 (О...31 - это коды служебных символов) происходит наполнение обоих списков: в List1 помещается строка, содержащая символ и его код, а в List2 - наоборот, сначала код, а затем сам символ. Поскольку символьное представление кода дополняется до трех символов (в двузначных числах слева добавляется ведущий ноль), строки в списке List1 окажутся отсортированными по символу, а в списке List2 - по коду символа. Затем оба списка для наглядности объединяются и помещаются в редактор mmOutput.

procedure TfmExample.bbRunClick (Sender: TObject);

var

k: Byte;

Listi, List2: TStringList;







Дата добавления: 2015-10-18; просмотров: 456. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Понятие и структура педагогической техники Педагогическая техника представляет собой важнейший инструмент педагогической технологии, поскольку обеспечивает учителю и воспитателю возможность добиться гармонии между содержанием профессиональной деятельности и ее внешним проявлением...

Репродуктивное здоровье, как составляющая часть здоровья человека и общества   Репродуктивное здоровье – это состояние полного физического, умственного и социального благополучия при отсутствии заболеваний репродуктивной системы на всех этапах жизни человека...

Случайной величины Плотностью распределения вероятностей непрерывной случайной величины Х называют функцию f(x) – первую производную от функции распределения F(x): Понятие плотность распределения вероятностей случайной величины Х для дискретной величины неприменима...

ОСНОВНЫЕ ТИПЫ МОЗГА ПОЗВОНОЧНЫХ Ихтиопсидный тип мозга характерен для низших позвоночных - рыб и амфибий...

Принципы, критерии и методы оценки и аттестации персонала   Аттестация персонала является одной их важнейших функций управления персоналом...

Пункты решения командира взвода на организацию боя. уяснение полученной задачи; оценка обстановки; принятие решения; проведение рекогносцировки; отдача боевого приказа; организация взаимодействия...

Studopedia.info - Студопедия - 2014-2024 год . (0.014 сек.) русская версия | украинская версия