Лекции тема 13 Массивы в Delphi
Download 78.26 Kb.
|
Массивы в Delphi
текст лекции тема 13 Массивы в Delphi Для ввода массива удобно использовать компонент StringGrid. Значок компонента StringGrid находится на вкладке Additional (рис. 5.1). Рис. 5.1. Компонент StringGrid
Таблица 5.1. Свойства компонента StringGrid
В качестве примера использования компонента StringGrid для ввода массива рассмотрим программу, которая вычисляет среднее арифметическое значение элементов массива. Диалоговое окно программы содержит компоненты: StringGrid — для ввода массива, Label1 и Label2 — для вывода пояснительного текста и результата расчета, Button1 — для запуска процесса расчета. Добавляется компонент StringGrid в форму точно так же, как и другие компоненты. После добавления компонента к форме нужно выполнить его настройку в соответствии с табл. 5.2. Значения свойств Height и Width нужно при помощи мыши установить такими, чтобы размер компонента был равен размеру строки.
Диалоговое окно программы после установки свойств компонента StringGrid1 приведено на рис. 5.2, а текст программы — в листинге 5.2. Рис. 5.2. Диалоговое окно программы Ввод и обработка массива
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; StringGrid1: TStringGrid; Button1: TButton; Label2: TLabel; procedure ButtonlClick(Sender: TObject);
Form1: TForm1;
{$R *.dfm}
a : array[1..5] of integer; // массив summ: integer; // сумма элементов sr: real; // среднее арифметическое i: integer; // индекс
// считаем, что если ячейка пустая, то соответствующий // ей элемент массива равен нулю
if Length(StringGrid1.Cells[i-1,0]) <> 0
// обработка массива summ := 0; for i :=1 to 5 do summ := summ + a[i]; sr := summ / 5;
// вывод результата Label2.Caption := 'Сумма элементов: ' + IntToStr(summ) + #13+ 'Среднее арифметическое: ' + FloatToStr(sr);
После пробных запусков программы возникает желание внести изменения в процесс ввода массива. Например, было бы неплохо, чтобы курсор автоматически переходил в следующую ячейку таблицы, например, в результате нажатия клавиши. Сделать это можно при помощи процедуры обработки события OnKeyPress. На эту же процедуру можно возложить задачу фильтрации вводимых в ячейку таблицы данных. В нашем случае надо разрешить ввод в ячейку только цифр. Текст процедуры обработки события OnKeyPress приведен в листинге 5.3. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.
#8,'0'..'9' : ; // цифры и клавиша #13: // клавиша
Если нужно ввести массив дробных чисел (a: array[1..5] of real), то процедура обработки события OnKeyPress несколько усложниться, т. к. помимо цифр допустимым символом является символ-разделитель (запятая или точка, какой — зависит от настройки Windows) и минус. С целью обеспечения некоторой дружественности программы к пользователю можно применить трюк: подменить вводимый пользователем неверный разделитель верным. Определить, какой символ-разделитель допустим в текущей настройке Windows, можно обратившись к глобальной переменной DecimalSeparator. В листинге 5.4 приведен текст модуля приложения ввода и обработки массива дробных чисел. Процедура обработки события OnKeyPress обеспечивает ввод в ячейку таблицы только допустимых при записи дробного числа символов.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
TForm1 = class(TForm) Label1: TLabel; StringGrid1: TStringGrid; Button1: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure StringGridlKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end;
Form1: TForm1;
{$R *.dfm}
var a : array[1..5] of real; // массив summ: real; // сумма элементов sr: real; // среднее арифметическое i: integer; // индекс
// обработка массива 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' : ; // цифры и клавиша #13: // клавиша
then StringGrid1.Col := StringGrid1.Col + 1;
' . ', ' , '; // разделитель целой и дробной частей числа begin if Key <> DecimalSeparator then Key := DecimalSeparator; // заменим разделитель // на допустимый
then Key := Chr(0); // запрет ввода второго // разделителя end;
// т, е. когда ячейка пустая if Length(StringGrid1.Cells[StringGrid1.Col,0]) <> 0 then Key := Chr(0) ; else // остальные символы запрещены key := Chr(0) ; end; end;
Литература http://uzinfobiz.ru http://cppstudio.com https://works.doklad.ru/view/pD_M-WmKmN8.html Шлеер С, Меллор С. Объектно-ориентированный анализ: моделирование мира в состояниях: Пер. с англ. — Киев : Диалектика, 1993. — 240 с: ил. http://labs-org.ru/obektno-orientirovannoe-vizualnoe-programmirovanie/ https://www.bsuir.by/m/12_100229_1_63301.pdf http://www.delphi-manual.ru/standart.php Download 78.26 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling