Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.012 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал