Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Delphi_1курс лекции / Тема 06 Таблицы строк.doc
Скачиваний:
62
Добавлен:
23.03.2015
Размер:
180.74 Кб
Скачать

Пример использования компонента StringGrid для ввода массива

В качестве примера использования компонента StringGrid для ввода массива рассмотрим программу, которая вычисляет среднее арифметическое значение элементов массива. Диалоговое окно программы приведено на рис.1 . Компонент StringGrid используется для ввода массива, компоненты Label1 и Label2 — для вывода пояснительного текста и результата расчета, Button1 — для запуска процесса расчета.

Рис. 1. Диалоговое окно программы Ввод и обработка массива

Добавляется компонент StringGrid в форму точно так же, как и другие компоненты. После добавления компонента к форме нужно выполнить его настройку в соответствии с табл. 1. Значения свойств Height и Width следует при помощи мыши установить такими, чтобы размер компонента был равен размеру строки.

Текст программы приведен в листинге 1.

Таблица 1. Значения свойств компонента StringGrid1

Свойство

Значение

ColCount

5

FixedCols

0

RowCount

1

DefaultRowHeight

24

Height

24

DefaultColWidth

64

Width

328

Options . goEditing

True

Options . AlwaysShowEditing

True

Options .goTabs

True

 

Листинг 1. Ввод и обработка массива целых положительных чисел

unit getar_;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls;

const n=5;

type

TIntArr = array[1..n] of integer;

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;

A : TIntArr;

implementation

{$R *.dfm}

// Процедура обработки массива

procedure CalcArr(A: array of integer; var s : integer; var sr : real);

var

i : integer;

begin

s:=0;

for i:=0 to high(A) do

s := s + A[i];

sr := s / length(A);

end;

procedure TForm1.Button1Click(Sender: TObject);

var

summ: integer; // сумма элементов

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

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

begin

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

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

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

for i:= 1 to StringGrid1.ColCount do

begin

if StringGrid1.Cells[i-1,0] = ''

then

StringGrid1.Cells[i-1,0]:='0';

A[i] := StrToInt(StringGrid1.Cells[i-1,0])

end;

CalcArr(A,summ,sr);

// вывод результата

Label2.Caption :=

'Сумма элементов: ' + IntToStr(summ) + #13+

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

end;

end.

После пробных запусков программы возникает желание внести изменения в процесс ввода массива. Так, было бы неплохо, чтобы курсор автоматически переходил в следующую ячейку таблицы, например, в результате нажатия клавиши <Enter>. Сделать это можно при помощи процедуры обработки события onKeyPress. На эту же процедуру можно возложить задачу фильтрации вводимых в ячейку таблицы данных. В нашем случае надо разрешить ввод в ячейку только цифр.

Текст процедуры обработки события OnKeyPress приведен в листинге 2. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.