
- •TStringGrid - таблица строк
- ••Компонент TStringGrid предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки.
- ••Центральным свойством компонента является Cells - двухмерный массив ячеек, каждая из которых может
- •Содержимое ячеек можно редактировать. Для этого в таблице используется специализированный потомок редактора TMaskEdit.
- •property BorderStyle: TBorderStyle;
- •property Objects [ACols ARow:
- •Два метода класса могут оказаться полезными для процедуры прорисовки:
- •Пример
- ••Поместите на панель еще одну кнопку TBitBtn и установите в ее свойство Kind
- •Создайте такой обработчик события OnClick для кнопки BitBtn1: procedure TfmStGrid.BitBtnIClick(Sender: TObject) ;
- •//Готовим список Words:
TStringGrid - таблица строк
•Компонент TStringGrid предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. Он является прямым потомком TDrawGrid , от которого им унаследовано большинство свойств и методов.
•Таблица делится на две части - фиксированную и рабочую. Фиксированная служит для показа заголовков столбцов/рядов и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы, однако с помощью свойств FixedCols и FixedRows можно задать другое количество фиксированных столбцов и рядов (если эти свойства имеют 0, таблица не содержит фиксированной зоны). Рабочая часть - это остальная часть таблицы. Она может содержать произвольное количество столбцов и рядов, более того, эти величины могут изменяться программно. Рабочая часть может не умещаться целиком в пределах окна компонента, в этом случае в него автоматически помещаются нужные полосы прокрутки. При прокрутке рабочей области фиксированная область не исчезает, но меняется ее содержимое - заголовки строк и рядов.
•Центральным свойством компонента является Cells - двухмерный массив ячеек, каждая из которых может содержать произвольный текст. Конкретная ячейка определяется парой чисел - номером столбца и номером ряда, на пересечении которых она находится (нумерация начинается с нуля). Свойство cells имеет тип String, поэтому программа может легко прочитать или записать содержимое нужной ячейки. Например:
•Cells [1,1] := 'Левая верхняя ячейка рабочей зоны';
•Количество ячеек по каждому измерению хранит пара свойств Colcount (количество столбцов) и RowCount (количество рядов). Значения-этих свойств и, следовательно, размеры таблицы могут меняться как на этапе разработки программы, так и в ходе ее работы, однако их значения должны быть как минимум на единицу больше соответственно значений в свойства FixedCois и FixedRows, определяющих размеры фиксированной зоны.
Содержимое ячеек можно редактировать. Для этого в таблице используется специализированный потомок редактора TMaskEdit.
Свойства компонента:

property BorderStyle: TBorderStyle;
property Cells[ACol, ARow: Integer] :String; property Col: Longint;
property ColCount: Longing-
property Cols[Index: Integer]: TStrings;
property ColWidths[Index: Longint] : Integer;
property DefaultColWidth: Integers; property DefaultDrawing: Boolean;
property DefaultRowHeight: Integers; property EditorMode: Boolean;
property FixedColor: TColor; property FixedCois: Integers; property FixedRows: Integers; property GridHeight: Integers; property GridLineWidth: Integers; property GridWidth: Integers; property LeftCol: Longint;
Определяет рамку компонента: bsNone нет рамки; bsSingle - рамка толщиной 1 пиксель
Определяет содержимое ячейки с табличными координатами (ACol, ARow)
Содержит номер столбца сфокусированной ячейки
Содержит количество столбцов таблицы
Содержит все строки колонки с индексом Index
Содержит ширину столбца с индексом Index
Содержит умалчиваемое значение ширины столбца
Разрешает/запрещает автоматическую прорисовку служебных элементов таблицы - фиксированной зоны, фона и прямоугольника сфокусированной ячейки и т. п.
Содержит умалчиваемую высоту рядов
Разрешает/запрещает редактирование ячеек. гнорируется, если свойство Options включает goAlwayseShowEditor или не включает goEditing
Определяет цвет фиксированной зоны
Определяет количество столбцов фиксированной зоны
Определяет количество рядов фиксированной зоны
Содержит высоту таблицы
Определяет толщину линий, расчерчивающих таблицу
Содержит ширину таблицы
Содержит номер самого левого столбца, видимого в зоне прокрутки

property Objects [ACols ARow: |
Обеспечивает доступ к объекту, связанному с ячейкой (ACol, ARow) |
Integer] : TObject; |
|
property Options: TGridOptions; |
Содержит параметры таблицы (см. ниже) |
property Row: Longing; |
Содержит номер ряда сфокусированной ячейки |
property RowCount: Longint; |
Содержит количество рядов таблицы |
property RowHeights[Index: |
Содержит высоту ряда с индексом index |
Long int] : Integer; |
|
property Rows[Index: Integer]: |
Содержит все строки ряда с индексом |
TStrings; |
Index |
type TScrollStyle = (ssNone, |
Определяет полосы прокрутки: ssNone -нет полос; ssHorizontal - в таблицу вставляется |
ssHorizontal, ssVertical, |
горизонтальная полоса; |
ssBoth) ; |
|
property ScrollBars: TScroll |
ssVertical - вставляется вертикальная |
Style; |
полоса; ssBoth - вставляются обе полосы |
TGridRect = record |
Определяет группу выделенных ячеек в |
case Integer of |
координатах левая верхняя и правая |
0: (Left,Top,Right,Bottom: Long |
нижняя ячейки(нумерация столбцов и рядов идет от нуля, включая столбцы и |
int) ; |
ряды фиксированной зоны). После выделения сфокусированной окажется правая |
1: (TopLeft, |
нижняя ячейка |
BottomRight: TGridCoord) ; |
|
end; |
|
property Selection: TGridRect; |
Разрешает/запрещает выбирать столбец с индексом index при обходе ячеек клавишей |
property TabStops[Index: Long |
Tab. Игнорируется, если Options не содержит goTabs |
int] : Boolean; |
|
property TopRow: Longint; |
Содержит номер самого верхнего ряда, видимого в прокручиваемой зоне ячеек |
property VisibleColCount: |
Содержит количество столбцов, полностью видимых в зоне прокрутки |
Integer; |
|
property VisibleRowCount: |
Содержит количество рядов, полностью видимых в зоне прокрутки |
Integer; |
|

Два метода класса могут оказаться полезными для процедуры прорисовки:
function CellRect(ACol, ARow: TRect; |
Возвращает прямоугольник ячейки по номерам столбца ACol и ряда Arow |
|
|
Longint): |
|
procedure MouseToCell(X, Y: Integer; |
Возвращает табличные координаты ячейки ACol и arow по экранным координатам(X,У)точки |
var ACol, ARow: Longint); |
|

Пример
В следующем примере компонент TStringGrid используется для показа всех слов из произвольного текстового файла.
•Назовите пустую форму именем fmStGrid и положите на нее панель TPanel.
•Установите в свойство панели Align значение alBottom, чтобы панель всегда занимала самую нижнюю часть окна, и удалите текст в ее свойстве caption.
•Поместите на панель кнопку TBitBtn, установите в ее свойство
•Caption строку Открыть файл..., загрузите в свойство Glyph файл images | buttons | FILE OPEN.BMP и растяните кнопку по горизонтали так, чтобы надпись и пиктограмма полностью умещались на ее поверхности.
•Поместите на панель еще одну кнопку TBitBtn и установите в ее свойство Kind значение bkClose.
•Поместите на панель компонент OpenDialog из страницы компонентов Dialogs. Этот компонент создает и обсуживает стандартное для Windows окно открытия файла. С его помощью при прогоне программы вы сможете выбрать текстовый файл (например, файл с текстом программы), чтобы программа показала в таблице все слова из этого файла.
•На форму (а не на панель panel1) положите компонент TStringGrid.
•Поместите в его свойства ColCount и RowCount значения 2 (количество колонок и рядов таблицы должно быть больше, чем количество фиксированных колонок FixedCois и количество фиксированных рядов FixedRows). Установите в свойство Align компонента значение alClient, чтобы он занял все свободное место формы.
•На этом закончим этап конструирования формы. Вся основная работа будет связана с нажатием кнопки BitBtn1: программа сначала предложит вам выбрать текстовый файл, затем прочитает его и создаст список отсортированных в алфавитном порядке слов из каждой строки файла, после чего наполнит словами таблицу. Наполнение будет происходить так, чтобы каждый столбец строки содержал все слова, начинающиеся на одну и ту же букву.
Создайте такой обработчик события OnClick для кнопки BitBtn1: procedure TfmStGrid.BitBtnIClick(Sender: TObject) ;
Function GetWord(var S: String): String;
{ Вспомогательная функция для выделения очередного слова из строки }
const // Множество символов слова:
Letters: set of Char = ['a'..'z', 'A'..'Z', 'A'..'я']; begin
Result := '' ;
{ Уничтожаем в начале строки все символы, не относящиеся к слову } while (S о '') and not (S[1] in Letters) do
Delete (S, 1, 1);
// Формируем очередное слово while (S<> '') and (S[1] in Letters) do begin
Result := Result + S[1];
Delete (S, 1, 1) end;
end; //Get Word var
F: TextFile; // Файл с текстом S,
Word: String; // Вспомогательные строки
NCol, NRow: Integer;// Номер текущей колонки и текущего ряда Words: TStringList; // Список отсортированных слов из файла
begin
//С помощью стандартного диалога получаем имя файла if not OpenDialogI.Execute then
Exit; // Пользователь отказался выбрать файл
//Пытаемся открыть файл
AssignFile(F, OpenDialogI.FileName) ; try
Reset(F) ; except
// Файл нельзя открыть:
ShowMessage('Невозможно открыть файл ' +OpenDialogI.FileName) ;
Exit;
end;