-
Окно для вывода текста Memo
Класс TStrings предназначен для хранения набора строк. Этот Класс является непосредственным потомком класса TPersistent, что означает в частности, что у него уже есть способность по сохранению и чтению своих данных.
Класс TStrings не используется в программах непосредственно (т. е. не надо пытаться создать переменную такого типа). Чаще всего он используется или как свойство некоторого компонента (например, у компонента Memo есть свойство Lines типа TStrings). Если же нам в программе нужен просто набор строк, то следует использовать экземпляр класса TStringList, который является потомком класса TStrings.
Рассмотрим основные свойства и методы класса TString. В наших примерах мы для конкретности будем иметь дело со свойством Lines экземпляра класса TMemo (компонент Memo расположен на вкладке Standard Палитры компонентов). Его свойство Lines как раз и имеет тип TStrings.
Основное свойство для класса TStrings - это Strings, в которое можно записывать отдельные строки через индекс:
Memo1.Lines.Strings[0]:='London';
Memo1.Lines.Strings[0]:='Paris';
Свойство Count возвращает число элементов в списке:
ShowMessage(IntToStr(Memo1.Lines.Count));
А вот так можно пройтись по всем строкам, входящим в TStrings:
var
i: Integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do
ShowMessage(Memo1.Lines[i]);
...
Свойство IndexOf позволяет выяснить, на каком месте в списке находится некоторая строка (и есть ли она вообще). Вот пример его использования:
var
k: Integer;
begin
//Получаем номер строки "Igor".
k:=Memo1.Lines.IndexOf('Igor');
ShowMessage(IntToStr(k));
end;
Свойство IndexOf равно номеру места, на котором находится нужная строка (нумерация идет с нуля). Если такой строки вообще нет, то свойство IndexOf будет равно -1.
Методы Add и Insert служат для добавления строк в конец и на определенное место соответственно. Вот пример их применения:
//Добавление в конец списка.
Memo1.Lines.Add('Roma');
//Добавление на второе место.
Memo1.Lines.Insert(2, 'Berlin');
Удаление элемента с определенного места делаем методом Delete. Вот пример его использования:
var
i:Integer;
...
//Получаем номер элемента Roma.
i:= Memo1.Lines.IndexOf('Roma');
//Если элемент существует.
if i> -1 then
Memo1.Lines.Delete(i);
В этом примере мы сначала выясняем, на каком месте находится строка ‘Roma’, и затем удаляем ее (конечно, если она есть).
-
Компонент StringGrid
Компонент StringGrid предназначен для отображения и хранения текстовой информации в виде таблицы. Расположен он на вкладке Additional Палитры компонентов:
Размер таблицы определяется свойствами ColCount и RowCount. Они задают количество столбцов и строк соответственно. При необходимости эти свойства можно менять и программно. Размеры же ячеек в пикселах задают свойства DefaultColWidth и DefaultRowHeight. Если же надо задать размер некоторого столбца или некоторой строки отдельно, то надо воспользоваться свойствами ColWidths или RowHeights соответственно. Вот пример, в котором мы задаем для первого столбца ширину в 40 пикселов:
StringGrid1.ColWidths[0]:=40;
Как видно, нумерация идет с нуля.
Свойства FixedCols и FixedRows определяют, сколько столбцов и строк будут использоваться для названий столбцов и строк. По умолчанию эти два свойства равны единице. Такие столбцы и строки выделяются серым цветом (это определяет свойство FixedColor) и при прокрутке нашей таблицы остаются зафиксированными. В принципе их можно использовать как угодно, но чаше всего в них помещают названия столбцов и строк.
Для того чтобы получить доступ к некоторой ячейке, надо использовать свойство Cells. Вот пример, в котором мы записываем во вторую строчку второго столбца значение ‘abcd’:
StringGrid1.Cells[1,1]:='abcd';
При необходимости можно работать и со строками или столбцами целиком. Для работы со строками надо использовать свойство Rows, а со столбцами - Cols. Скажем, вот так можно целиком скопировать вторую строки в третью (помните, что нумерация идет с нуля):
StringGrid1.Rows[2]:=StringGrid1.Rows[1];
Например, это может понадобиться при удалении некоторой строки из таблицы - в этом случае следующие за ней строки должны "подняться" наверх на один ряд каждая.
Множество важных параметров компонента StringGrid являются подсвойствами свойства Options:
Вот некоторые из них. Подсвойство goEditing отвечает за возможность редактирования ячеек таблицы. Если это свойство установить в true, то редактирование возможно (путем двойного щелчка на нужной ячейке). Подсвойство goRowSelect, если оно установлено в true, то при щелчке на ячейке выделяется весь ряд. Установленное в true подсвойство goTabs позволяет перемещаться между ячейками посредством клавиши TAB. Если вы хотите позволить пользователю изменять размеры столбцов путем перетаскивания границ у заголовков, то установите значение подсвойства goColSizing в true.
Одна из частых задач - это получение информации, в какую из ячеек пользователь внес изменения. Для определения этого надо воспользоваться обработчиком события OnSetEditText для StringGrid:
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
Form1.Caption:=IntToStr(ACol) + ' ' + IntToStr(ARow);
end;
Как видно, номера строки и столбца измененной ячейки передаются в параметры ACol и ARow.