Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ по работе с таблицей в Делфи.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
247.81 Кб
Скачать

Листинг 2. Процедура обработки события 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, можно, обратившись к глобальной переменной DecimalSeparator

В листинге 3 приведен текст модуля приложения ввода и обработки массива дробных чисел. Процедура обработки события OnKeyPress обеспечивает ввод в ячейку таблицы только допустимых при записи дробного числа символов.

Листинг 3. Ввод и обработка массива дробных чисел 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(DecimalSeparator ,StringGridl.Cells[StringGridl.Col,0]) <> 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.

В таблице можно работать не с каждой ячейкой, а со всей строкой или со всем столбцом .