Иллюстрированный самоучитель по Delphi 7 для начинающих

Использование компонента StringGrid

Листинг 5.2. Ввод и обработка массива целых чисел.

unit getar_;
interface
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCTRLs;
type
TForm1 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Label2: TLabel;
procedure ButtonlClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForml;
implementation
{$R *.dfm}
procedure TForml.ButtonlClick(Sender: TObject); var
a: array[1..5] of integer; // массив
summ: integer; // сумма элементов
sr: real; // среднее арифметическое
i: integer; // индекс
begin
// ввод массива
// считаем, что если ячейка пустая, то соответствующий
// ей элемент массива равен нулю
for i: = 1 to 5 do
if Length(StringGrid1.Cells[i-1, 0]) <>0
then a[i]: = StrToInt(StringGrid1.Cells[i-1.0])
else a[i]: = 0;
// обработка массива
summ: = 0;
for i: = 1 to 5 do
summ: = summ + a[i]; sr: = summ / 5; //вывод результата
Label2.Caption: = 'Сумма элементов: ' + IntToStr(summ)
+ #13+ 'Среднее арифметическое: ' + FloatToStr(sr);
end;
end.

После пробных запусков программы возникает желание внести изменения в процесс ввода массива. Так, было бы неплохо, чтобы курсор автоматически переходил в следующую ячейку таблицы, например, в результате нажатия клавиши Enter. Сделать это можно при помощи процедуры обработки события OnKeyPress. На эту же процедуру можно возложить задачу фильтрации вводимых в ячейку таблицы данных. В нашем случае надо разрешить ввод в ячейку только цифр.

Текст процедуры обработки события OnKeyPress приведен в листинге 5.3. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.

Листинг 5.3. Процедура обработки события OnKeyPress.

procedure TForm1.StringGrid1KeyPress(Sender: TObject;
var Key: Char);
begin
case Key of
#8,'0'..'9':; // цифры и клавиша <Backspace>
#13: // клавиша Enter
if StringGrid1.Col < StringGrid1.ColCount -1
then StringGrid1.Col: = StringGrid1.Col + 1;
else key: = Chr(0); // остальные символы запрещены
end;
end;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.