Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_ПОА_2005_Builder.doc
Скачиваний:
7
Добавлен:
03.05.2019
Размер:
1.26 Mб
Скачать

Компонент 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.

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

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

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

  4. Правее первой таблицы поместите вторую кнопку, назовите ее ввод 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);

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

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

Caption="";

StringGrid3->RowCount=0;

StringGrid3->ColCount=0;

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

StringGrid2->RowCount=CSpinEdit3->Value;

StringGrid2->ColCount=CSpinEdit4->Value;

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

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.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]