Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
Type
TForm1 = class(TForm);
Label1: TLabel;
StringGridl: 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(StringGridl.Cells[i-1, 0]) <>0
then a[i]:= StrToInt(StringGridl.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 приведен в листинге 3. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.
Листинг 3. Процедура обработки события OnKeyPress
procedure TForm1.StringGridlKeyPress(Sender: TObject; var Key: Char);
Begin
case Key of
#8,'0'..'9':; // цифры и клавиша <Backspace>
#13: // клавиша <Enter>
if StringGridl.Col < StringGridl.ColCount — 1
then StringGridl.Col:= StringGridl.Col + 1;
else key:= Chr(0); // остальные символы запрещены
End;
End;
Если нужно ввести массив дробных чисел (a: array [1..5] of real), то процедура обработки события OnKeyPress несколько усложнится, т. к. помимо цифр допустимыми символами являются символ-разделитель (запятая или точка — зависит от настройки Windows) и минус. С целью обеспечения некоторой дружественности программы по отношению к пользователю можно применить трюк: подменить вводимый пользователем неверный разделитель верным. Определить, какой символ-разделитель допустим в текущей настройке Windows, можно, обратившись к глобальной переменной DecimaiSeparator.
В листинге 4 приведен текст модуля приложения ввода и обработки массива дробных чисел. Процедура обработки события OnKeyPress обеспечивает ввод в ячейку таблицы только допустимых при записи дробного числа символов.
Листинг 4. Ввод и обработка массива дробных чисел
unit. getar_1; 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 Button1ClicktSender: TObject);
procedure StringGridlKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ButtonlClick(Sender: TObject);
var
a: array[1..5] of real; // массив
suram: real; // сумма элементов
sr: real; // среднее арифметическое
i: integer; // индекс
begin
// ввод массива
// считаем, что если ячейка пустая, то соответствующий
// ей элемент массива равен нулю
for i:= 1 to 5 do
if Length(StringGridl.Cells[i-l,0])<>0
then a[i]:= StrToFloat(StringGridl.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:='Сумма элементов: ' + FloatToStr(summ)
+ #13+ 'Среднее арифметическое: ' + FloatToStr(sr);
end;
// Функция обеспечивает ввод в ячейку только допустимых символов
procedure TForm1.StringGridlKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#8,'0'..'9':; // цифры и <Backspace>
#13: // клавиша <Enter>
if StringGridl.Col < StringGridl.ColCount - 1
then StringGridl.Col:= StringGridl.Col + 1; '.',',':
// разделитель целой и дробной частей числа
begin
if Key <> DecimalSeparator then
Key:= DecimalSeparator;
// заменим разделитель
// на допустимый
if Pos(StringGridl.Cells[StringGridl.Col,0],
DecimalSeparator) <> 0
then Key:= Chr(O); // запрет ввода второго
// разделителя
end;
' -': // минус можно ввести только первым символом,
// т. е. когда ячейка пустая
if Length(StringGrid1.Cells[StringGrid1.Col, 0]) <>0 then
Key:= Chr(0);
else // остальные символы запрещены
key:= Chr(0);
end;
end;
end.
Дата публикования: 2014-11-18; Прочитано: 252 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!