Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 5.doc
Скачиваний:
5
Добавлен:
06.05.2019
Размер:
610.3 Кб
Скачать

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 Button1Click(Sender: TObject);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

private { Private declarations }

public { Public declarations }

end;

var

Form1: TForm1;

Implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

a : array[1..5] of real; // массив

suram: real; // сумма элементов

sr: real; // среднее арифметическое

i: integer; // индекс

begin

// ввод массива

// считаем, что если ячейка пустая, то соответствующий

// ей элемент массива равен нулю

for i:= 1 to 5 do

if Length(StringGrid1.Cells[i-1,0])<>0

then a[i] := StrToFloat(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 :='Сумма элементов: ' + FloatToStr(summ)

+ #13+ 'Среднее арифметическое: ' + FloatToStr(sr);

end;

// Функция обеспечивает ввод в ячейку только допустимых символов

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;

'.',',': // разделитель целой и дробной частей числа

begin

if Key <> DecimalSeparator then

Key := DecimalSeparator; // заменим разделитель

// на допустимый

if Pos(StringGrid1.Cells[StringGrid1.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.

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

В некоторых случаях для ввода массива можно использовать компонент Memo. Компонент Memo позволяет вводить текст, состоящий из достаточно большого количества строк, поэтому его удобно использовать для ввода символьного массива. Компонент Memo добавляется в форму обычным образом. Значок компонента находится на вкладке Standard (рис. 5.4).

Рис. 5.4. Компонент Memo

В табл. 5.3 перечислены некоторые свойства компонента Memo.

Таблица 5.3. Свойства компонента Memo

Свойство

Определяет

Name

Имя компонента. Используется в программе для доступа к свойствам компонента

Text

Текст, находящийся в поле Memo. Рассматривается как единое целое

Lines

Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру

Lines .Count

Количество строк текста в поле Memo

Left

Расстояние от левой границы поля до левой границы формы

Top

Расстояние от верхней границы поля до верхней границы формы

Height

Высоту поля

Width

Ширину поля

Font

Шрифт, используемый для отображения вводимого текста

ParentFont

Признак наследования свойств шрифта родительской формы

При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу <Enter>.

Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с нуля).

Следующая программа, текст которой приведен в листинге 5.5, демонстрирует использование компонента Memo для ввода символьного массива.

Основной цикл процедуры ввода символьного массива из компонента Memo может выглядеть так:

for i:=l to SIZE do

a [ i ]:= Memo1.Lines[i];

где:

  • SIZE — именованная константа, определяющая размер массива;

  • а — массив;

  • Memo1 — имя Memo-компонента;

  • Lines — свойство компонента Memo, представляющее собой массив, каждый элемент которого содержит одну строку находящегося в поле Memo текста.

Форма программы приведена на рис. 5.5. Помимо поля Memo она содержит командную кнопку (Button1), при щелчке, на которой выполняется ввод значений элементов массива из поля Memo.

Рис. 5.5. Диалоговое окно приложения Ввод массива

Листинг 5.5. Ввод массива строк из компонента Memo

unit fr_memo_;