Использование компонента 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;