Компонент StringGrid – это таблица, которая содержит строки и столбцы, напоминающая таблицы Excel. Данные в ячейках таблицы могут быть использованы как только чтение, так и с возможностью ввода/редактирования. Если таблица компонента StringGrid слишком большая и не помещается в размеры формы, то есть возможность подключить полосы прокрутки по горизонтали, вертикали и совместный режим. При необходимости можно задать фиксированные строки и столбы, причём любое количество, которые не будут прокручиваться. Достаточно полезный функционал, если таблица содержит большое количество данных.
Компонент StringGrid – это отличное решение для отображения структурированных текстовых данных. Но StringGrid позволяет отображать и графические данные.
Основные свойства
Значение | Описание |
---|---|
System:: AnsiString Cells [int ACol][int ARow] | Строка таблицы, которая содержится в ячейке с индексами столбца ACol и строки ARow. |
Classes::TStrings* Cols[int Index] | Список строк, связанные с объектом, которые содержатся в столбце с индексом Index. |
Classes::TStrings* Rows [int Index] | Список строк, связанные с объектом, которые содержатся в строке с индексом Index. |
System::TObject* Objects [int ACol][int ARow] | Объект, связанный со строкой, который содержится в ячейке с индексами столбца ACol и строки ARow. |
Все основные свойства компонента StringGrid доступны во время программирования приложения. Задавать текст в ячейки можно как программно на все сразу, так и по отдельности сразу по строкам и столбцам методов класса TStrings.
Дополнительные свойства
- ColCount – задаёт количество столбцов.
- RowCount – задаёт количество строк.
- FixedCols – задаёт количество фиксированных столбцов.
- FixedRows – задаёт количество фиксированных строк.
- FixedColor – задаёт цвет фона фиксированных строк и столбцов.
- LeftCol – первый видимый столбец при прокручивании таблицы.
- TopRow – первая видимая строка при прокручивании таблицы.
- ScrollBars – включает отображение полос прокрутки содержимого таблицы. Если содержимое таблицы умещается в форму приложения, то полосы прокрутки автоматически скрываются.
- Options – дополнительные настройки взаимодействия с таблицей:
- goFixedVertLine и goFixedHorzLine – отображает разделительные горизонтальные и вертикальные линий в фиксированных ячейках;
- goVertLine и goHorzLine отображает разделительные горизонтальные и вертикальные линий в нефиксированных ячейках;
- goCoISizing и goRowSizing – позволяют изменять размеры строк и столбцов с помощью указателя мыши;
- goColMoving и goRowMoving – позволяет перемещать строки и столбцы;
- goEditing – позволяет редактировать содержимое таблицы.
Свойства Row и Col показывают индексы строки и столбца ячейки. Так же есть возможность множественного выделения ячеек, строк и столбцов.
В компоненте StringGrid есть полезное событие OnSelectCell, которое срабатывает в момент активации ячейки (нажатие на неё указателем мыши). В обработчик события передаются несколько параметров:
- ACol – номер столбца, типа int;
- ARow – номер строки, типа int;
- CanSelect – допустимость выбора, типа bool. При указании значения false, запрещает выделять указанную ячейку.
Пример работы с ячейками StringGrid
Для работы с ячейками таблицы StringGrid нужно предварительно заполнить её некоторыми данными:
for(int i = 1; i < StringGrid1->ColCount; i++) //StringGrid1->ColCount – определяет количество столбцов
StringGrid1->Cells[i][0] = "столбец " + IntToStr(i);
for(int i = 1; i < StringGrid1->RowCount; i++) //StringGrid1->RowCount – определяет количество строк
{
StringGrid1->Cells[0][i] = "строка " + IntToStr(i);
for(int j = 1; j < StringGrid1->ColCount; j++)
StringGrid1->Cells[j][i] = "C" + IntToStr(i) + " R" + IntToStr(j);
}
Для определения номера ячейки и её содержимого по клику мыши на соответствующую ячейку послужит небольшой код, добавленный в событие OnSelectCell компонента StringGrid:
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
bool &CanSelect)
{
Label1->Caption = "Выбрана ячейка " + IntToStr(ARow) + ":" + IntToStr(ACol) + ". Текст ячейки: " + StringGrid1->Cells[ACol][ARow];
}