
- •1.Операционные системы, классификация, функциональные
- •2. Подсистема защиты информации
- •3. Многослойность ос, ядро и вспомогательные функции.
- •4. Управление оперативной памятью: основные подходы.
- •2 Способа преобразования виртуального адреса в физический.
- •Организация виртуальной памяти, стратегии вытеснения страниц
- •6. Преобразование виртуального адреса в физический
- •9. Структурная обработка исключений
- •10. Пример работы с ис (конвертирование графических форматов)
- •11. Создание компонентов, иерархия, области видимости
- •12. Создание свойств
- •13. События компонентов
- •14. Пример создания компонента часы
- •15. Пример создания компонента с опубликованным свойством Tstrings.
- •16. Класс Tstrings
- •17. Свойства и методы Tcanvas
- •18. Встроенные графические классы
16. Класс Tstrings
Работа многих компонентов построена на имеющемся в их составе свойстве класса Tstrings. Например: Items у ListBox и RadioGroup, Lines у Memo и тд. Этот класс применяется для хранения любых объектов наследников класса Tobject и связанных с ними текстовых строк. Tstrings — абстрактный класс. Обратиться к нему можно лишь при посредничестве соответствующего компонента. Можно создать экземпляр класса Tstrings вне компонентов, используя объект потомок TstringList, наследующий свойства и методы Tstrings:
var SL: TStringList;
begin
SL := TStringList.create; // Но не SL := TString.create!
SL.add(‘Строка’);
…
end;
К строкам и объектам, хранящимся в TStrings, можно обратиться с помощью индексированных свойств
property Strings[i: integer]: string; default;
property Object [i: integer]: TObject;
Атрибут default означает, что имя индексированного свойства может быть опущено, например, следующие обращения равнозначны:
ListBox1.items.strings[1]:=’Строка’;
ListBox1.items[1]:=’Строка’;
Общее число строк можно определить, обратившись к свойству Count (тип integer) класса TStrings.
Класс TStrings также применяется для хранения пар вида «параметр-значение». При чтении (записи) свойства
property Values[const Name: string]: string;
ищется строка, содержащая подстроку вида Name=значение и возвращается (записывается) значение после символа «=» .
Например, опрератор ListBox1.Items.Values[‘y’]:=1;
приведет к появлению в списке строки y=1.
Основные свойства и методы класса TStrings приведены в таблице:
Property Count: integer; |
Число пар строк и объектов. |
Function Add(const S: string): integer; |
Добавляет строку в конец набора и возвращает присвоенный ей номер. |
Function AddObject(const S: string; AObject: Tobject): integer; |
Добавляет строку и объект. Возвращает присвоенный паре номер |
procedure AddStrings (Strings: TStrings); |
Добавляет в конец набора другой набор TSrings. |
procedure Clear; |
Очищает набор данных и освобождает связанную с ним память. |
procedure Delete (I: integer); |
Удаляет строку с индексом I. |
Function IndexOf (const S: string): integer; |
Возвращает номер в наборе строки S. Если она не найдена, функция возвращает -1. |
Function Equals (Strings: TStrings): boolean; |
Сравнивает набор строк вызвавшего этот метод объекта с набором Strings и возвращает True, если они совпадают. |
procedure Move(I1,I2:integer); |
Перемещает пару строка–объект с позиции I1 в позицию I2. |
procedure Exchange (I1,I2: integer); |
Меняет местами пары строка+объект с индексами I1 и I2. |
procedure LoadFromFile (const FileName: string); |
Загружает набор строк из файла |
procedure SaveToFile (const FileName: string); |
Сохраняет набор строк в файле |
procedure TForm1.Button1Click(Sender: TObject);
begin
(Sender as TControl).visible := False;
ListBox1.Items.AddObject((Sender as TButton).caption, Sender);
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
with ListBox1 do
begin
(Items.Objects[ItemIndex] as TButton).visible := true;
Items.Delete(ItemIndex);
end;
Для классов определены операции отношения = и <>. Кроме того, для классов определены еще две операции: as (как) и is (является). Первым операндом в обеих операциях является объект, вторым - класс.
Если A - объект, а C - класс, то выражение A as C возвращает тот же самый объект, но рассматриваемый как объект класса C. Операция даст результат, если указанный класс C является классом объекта A или одним из наследников этого класса. В противном случае будет сгенерировано исключение.
Наиболее часто операция as применяется к параметру Sender, передаваемому во все обработчики событий как объект - источник события и имеющему тип TObject, в котором очень мало свойств для идентификации объекта.
Приведем пример:
if (Sender as TComponent).Name = 'Button2' then ...;
Этот оператор выбирает событие, связанное с компонентом, имеющим имя Button2, и не реагирует на события, связанные с другими компонентами.
Выражение A is C позволяет определить, относится ли объект A к классу C или к одному из его потомков. Если относится, то операция is возвращает true, в противном случае - false. Например, оператор:
if Sender is TButton then ...;
будет реагировать только на объекты класса TButton или потомков этого класса