Компонент StringGrid

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

AnsiString Cells [int Acol][int ARow] Строка, содержащаяся в ячейке с индексами столбца и строки AColи ARow
TStrings* Cols[int Index] Список столбцов и связанных с ними объектов, содержащихся в столбце с индексом Index
TStrings* Rows[int Index] Список строк и связанных с ними объектов, содержащихся в строке с индексом Index
TObject* Object [int ACol][int ARow] Объект, связанный со строкой, содержащийся в ячейке с индексами столбца и строки AColиARow

Все эти свойства доступны во время выполнения. Задавать тексты можно программно или по отдельным ячейкам, или сразу по столбцам и строкам с помощью методов класса TStrings.

Свойства ColCountи RowCount определяют соответственно число столбцов и строк, свойства FixedCols и FixedRows − число фиксированных (непрокручиваемых) столбцов и строк. Цвет фона фиксированных ячеек определяется свойством FixedColor.

Из множества подсвойств свойства Options отметим важное − goEditing −возможность редактировать содержимое таблицы.

В основном компонент StringGrid используется для выбора пользователем каких-то значений, отображенных в ячейках. Свойства Colи Rowпоказывают индексы столбца и строки выделенной ячейки.

Среди множества событий компонента StringGridотметим событие OnSelectCell, возникающее в момент выбора пользователем ячейки. В обработчик этого события передаются целые параметры AColиARow (индексы столбца и строки выделенной ячейки) и булев параметр CanSelect− допустимость выбора. Этот параметр можно использовать для запрета выделения ячейки, задав его значение равным false.

Рассмотрим использование компонента StringGridпри вычислении произведения двух матриц.

1.Создайте новый проект и сразу сохраните файл модуля и проект под разными именами в созданной ранее папке.

2.В правый верхний угол пустой формы поместите первую кнопку, в свойство Captionвпишите конец, а в обработчик − Close();

Примечание. Во всех компонентах приложения используйте шрифт полужирный, размером 10.

3.Начнем подготовку компонентов для формирования первой матрицы произведения. В верхней части формы, посредине, поместите первую метку и назовите ее число столбцов.

4.Под первой меткой поместите первый компонент ввода целых чисел − CSpinEdit1 (со страницы Примеры библиотеки компонентов). В свойство MaxValue занесите 10, MinValue − 0, Value −3.

5.Под первым CSpinEdit1поместите первый компонент StringGrid1 (первую таблицу), слева от него − вторую метку и назовите ее число строк, под меткой поместите второй компонент CSpinEdit2и установите в нем те же значения свойств, что и в первом.

6.Правее первой таблицы поместите вторую кнопку, назовите ее ввод 1-й матрицы, а в обработчик впишите

int i,j;

Caption="";

StringGrid3->RowCount=0;

StringGrid3->ColCount=0;

StringGrid3->Cells[0][0]="";

StringGrid1->RowCount=CSpinEdit1->Value;

StringGrid1->ColCount=CSpinEdit2->Value;

for(i=0;i<StringGrid1->RowCount;i++)

for(j=0;j<StringGrid1->ColCount;j++)

StringGrid1->Cells[j][i]=IntToStr(random(101)-50);

7.Для первого компонента StringGrid1установите: FixedCols −0, FixedRows −0, в подсвойстве goEditing свойства Options− false. На этом подготовка компонентов для формирования первой матрицы завершается.

8.Подготовка компонентов для формирования второй матрицы произведения совпадает с подготовкой для первой матрицы, только в подсвойство goEditing свойства Options второго компонента StringGrid2внесите true, третью кнопку назовите ввод 2-й матрицы, а в обработчик щелчка по ней впишите

Caption="";

StringGrid3->RowCount=0;

StringGrid3->ColCount=0;

StringGrid3->Cells[0][0]="";

StringGrid2->RowCount=CSpinEdit3->Value;

StringGrid2->ColCount=CSpinEdit4->Value;

9.Итак, вторая таблица с ее компонентами находится на форме под первой таблицей. Третью таблицу (для матрицы-произведения) поместите под второй, а справа от третьей таблицы − четвертую кнопку с названием произведение, в обработчик щелчка по которой впишите

int i,j,k,z;

if(StringGrid1->ColCount!= StringGrid2->RowCount){

Caption="число столбцов 1-й матрицы не равно числу строк 2-й матрицы!";

return;}

StringGrid3->RowCount=CSpinEdit1->Value;

StringGrid3->ColCount=CSpinEdit4->Value;

for(i=0;i<StringGrid1->RowCount;i++)

for(j=0;j<StringGrid2->ColCount;j++){

z=0;

for(k=0;k<StringGrid1->ColCount;k++)

z+=StrToInt(StringGrid1->Cells[k][i])*

StrToInt(StringGrid2->Cells[j][k]);

StringGrid3->Cells[j][i]= IntToStr(z);

}

Свойства третьего компонента StringGrid3установите такими же, как у первого компонента StringGrid1.

10.Сохраните проект и запустите на выполнение. Для ввода первой матрицы достаточно нажать на соответствующую кнопку. Для ввода второй матрицы после щелчка на кнопке ввод 2-й матрицы нужно заполнить предложенные ячейки второй таблицы. Для получения матрицы-произведения достаточно щелкнуть на кнопке произведение. Чтобы быстро убедиться в правильности вычислений, сделайте вторую матрицу единичной. Проверьте соотношение числа строк и столбцов матриц-сомножителей для получения матрицы-произведения.

11.Для завершения работы с приложением щелкните на кнопке конец.

Наши рекомендации