Тема: Подія OnKeyPress
Всім доброго дня!
Завантажив підручник по Делфі - вчу по-тихеньку.
Ось фрагменти сторінки підручника на якій зупинивсь.
В качестве примера использования компонента stringGrid для ввода массива рассмотрим программу, которая вычисляет среднее арифметическое значение элементов массива. Диалоговое окно программы приведено на рис. 5.3. Компонент stringGrid используется для ввода массива, компоненты Label1 и Label2 — для вывода пояснительного текста и результата расчета, Button1 — для запуска процесса расчета.
Листинг 5.2. Ввод и обработка массива целых чисел
unit getar_; 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 приведен в листинге 5.3. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.
Листинг 5.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;
А от тут і проблема. Тут:
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;
?
Допоможіть, будь ласка.