Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Interface



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...