![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Доброго времени суток!
![]() У меня программа поиска элемента, вводимого в ячейки StringGrid. При нахождении элемента показывается сообщение "Найден", если же такого эл-та нет, то соответственно "Не найден". Преподаватель велел поставить в программу "Защиту от дураков", то есть если за компьютер садится какая-нибудь Баба Маня и вместо цифр начнёт писать элементы словами или писать символы или выходить за границы массива или дробные писать (в общем все-все-все её неправильные действия я должна предугадать), то программа НЕ должна вылетать, никаких окошек с крестиком не должно появляться, а должно показываться "Недопустимый элемент" и неправильное значение в ячейке или эдите должно стираться. Я решила сделать это через case, ну и затупила... ![]() ![]() Вот программа: Код:
unit laba3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) Button1: TButton; StringGrid1: TStringGrid; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; I,J: integer; implementation {$R *.dfm} procedure TForm1.Edit1Change(Sender: TObject); begin StringGrid1.ColCount:=StrToInt(Edit1.Text)+1; end; procedure TForm1.Button1Click(Sender: TObject); const SIZE=20; var a: array[1..SIZE] of integer; n: integer; found: boolean; i,m: integer; begin {ввод числа элементов массива n<20} n:=StrToInt(Edit1.text); {ввод массива } for i:=1 to n-1 do a[i]:=StrToInt(StringGrid1.Cells[i,1]); {ввод искомого элемента массива} m:=StrToInt(Edit2.text); {процедура поиска в массиве} found:=false; i:=1; repeat if a[i]=m then found:=true else i:=i+1; until (i>n) or (found = true); if found=true then ShowMessage('Совпадение с элементом номер '+ IntToStr(i)+#13+ 'Поиск успешно завершен') else ShowMessage('Заданный элемент не найден!'); end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin case Key of '1': ; '2': ; '3': ; '4': ; '5': ; '6': ; '7': ; '8': ; '9': ; '0': ; else begin Key:=''; ShowMessage('Недопустимый элемент!'); end; end; end. Красным выделено то что программа мне подсвечивает. Как исправить сиё недоразумение? ![]() |
#2
|
||||
|
||||
![]() Приблизительно так:
Код:
case Key of '0'..'9': ; else begin Key := #0; ShowMessage('Недопустимый элемент!'); end; end; |
#3
|
||||
|
||||
![]() хотя case ?
Код:
if not (Key in ['0'..'9']) then begin Key := #0; ShowMessage('Недопустимый элемент!'); end; |
#4
|
||||
|
||||
![]() Огромное спасибо
![]() |
#5
|
||||
|
||||
![]() и по поводу защиты от дурака
Код:
try {ввод числа элементов массива n<20} n := StrToInt(Edit1.text); except ShowMessage('Что Вы там по написали?'); Edit1.text := ''; // чтонибуть еще делаем Exit; end; |
#6
|
||||
|
||||
![]() ![]() |