Студопедия — КЛАССЫ 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; просмотров: 455. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Объект, субъект, предмет, цели и задачи управления персоналом Социальная система организации делится на две основные подсистемы: управляющую и управляемую...

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

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

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Прием и регистрация больных Пути госпитализации больных в стационар могут быть различны. В цен­тральное приемное отделение больные могут быть доставлены: 1) машиной скорой медицинской помощи в случае возникновения остро­го или обострения хронического заболевания...

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