Упражнение по вводу и обработки элементов массива с использованием StringGrid

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

Создайте форму, для свойства Caption задайте значение «Ввод и суммирование элементов массива». Выберите в палитре компонентов страницы Additional компонент StringGrid и разместите его по центру формы. В окне Инспектора объектов выберите компонент StringGrid1 и присвойте его свойству Align (Выравнивание) значение alNone (He изменять). При этом компонент StringGrid1 остается там, куда он был помещен во время проектирования, и размеры его не изменяются. Задайте для свойств ColCount и RowCount значения 5. Задайте для свойств FixedCols и FixedRows (количество фиксированных, не прокручиваемых столбцов и строк, используемых для размещения надписей номеров столбцов и строк) значение 1. На странице свойств Инспектора объектов разверните список свойства StringGrid1.Options и задайте для его подсвойств: goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected и goEditing значение True.

В левом нижнем углу формы разместите кнопку Button1 и присвойте ее свойству Caption значение «Вычислить». В правом нижнем углу формы разместите объект Edit1 для отображения суммы элементов массива. Над объектом StringGrid1 разместите компонент Label1 и задайте для его свойства Caption значение «Введите элементы массива». Слева от объекта Edit1 разместите компонент Label2 и задайте для его свойства Caption значение «Сумма элементов». Удалите текст Edit1 из окна Edit1. Выровняйте компоненты.

Сохраните файл проекта и программного модуля.

Чтобы обеспечить пользователю возможность ввода значений элементов двумерного массива в ячейки SringGrid1, создайте процедуру обработчика события OnEnter для объекта StringGrid1. Для этого выберите в окне Инспектора объектов объект StringGrid1 и на странице События произведите двойной щелчок на пустом поле списка в событии OnEnter, наступающем в момент получения элементом фокуса. После этого в окне Редактора кода будет сгенерирована заготовка процедуры обработчика события procedure TForml.FormCreate(Sender: TObject);

Так как эта процедура сводится к выводу в окне приложения таблицы StringGrid1 подписи номеров строк и столбцов, то текст этой процедуры можно записать следующим образом:

procedure TForm1.FormCreateCSender: TObject);
var
I,J: Integer: {номера столбцов и строк}
begin
with StringGrid1 do {вывести номера строк в 0 столбце и столбцов в 0 строке}
begin
I:=0: {столбец 0}
for J:= I to RowCount — 1 do
Ce11s[I,J] := IntToStr(J);
J:=0; {строка 0}
for I:= 1 to ColCount — 1 do Cells[I,J] := IntToStr(I);
end;
end;

Для предупреждения ошибки ввода в окно ячейки StringGrid1 нечислового значения введите обработку нажатия клавиши, чтобы запретить ввод любых

символов, кроме цифр от 0 до 9 и знаков «-» и «+». Для создания процедуры обработчика события нажатия клавиши выберите в окне Инспектора объектов компонент StringGrid1 и на странице Events (События) дважды щелкните левой кнопкой мыши на пустом поле списка в событии OnKeyPress. После этого окно Редактора кода немедленно получит фокус и в разделе interface появится запись процедуры обработчика события: procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);.

Вставьте в текст заготовки этой процедуры оператор

if not (Key in [‘0′..’9′,’-‘,’+’]) then
Key:=#0;

Сохраните, откомпилируйте и запустите приложение на выполнение. Как вы увидите, приложение обеспечивает ввод числовых значений элементов массива в ячейки StringGrid1, но не вычисляет их сумму при щелчке мышью на кнопке Button1, так как процедура обработки этого действия еще не создана.

Для подсчета элементов введенного массива следует записать в виде процедуры обработчик события щелчка мышью на кнопке Button1. Для генерации кода процедуры обработчика события выберите в окне Инспектора объектов объект Button1 и на странице События произведите двойной щелчок на пустом поле списка в событии OnClick, наступающем в момент получения элементом фокуса. После этого в окне Редактора кода будет сгенерирована заготовка процедуры обработчика события procedure TForm1.Button1Click(Sender: TObject);, в которую следует добавить следующие операторы:

procedure TForm1.Button1ClickCSender: TObject):
{подсчет суммы элементов}
var
I,J,Sum : integer;
begin
with StringGrid1 do
begin
Sum:=0; {обнулить сумму перед суммированиемэлементов}
Edit1.Text: = «;
for J:=l to RowCount — 1 do
for I:=1 to ColCount — 1 do
if Cells[J,I]<>» then
{если ячейка заполнена, то суммировать ее значение}
Sum:=Sum+StrToInt(CelIs[J,I]);
Edit1.Text:=IntToStr(Sum); {вывод результата суммирования}
end;
end;

Сохраните, откомпилируйте и запустите на выполнение созданное приложение. Теперь оно обеспечивает не только ввод числовых значений элементов массива в ячейки StringGrid1, но и вычисляет их сумму при щелчке на кнопке Button1.

Добавить комментарий