|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | ||||
| 
 | ||||
|  Программа "Защита от дураков", оператор case Доброго времени суток!   У меня программа поиска элемента, вводимого в ячейки StringGrid. При нахождении элемента показывается сообщение "Найден", если же такого эл-та нет, то соответственно "Не найден". Преподаватель велел поставить в программу "Защиту от дураков", то есть если за компьютер садится какая-нибудь Баба Маня и вместо цифр начнёт писать элементы словами или писать символы или выходить за границы массива или дробные писать (в общем все-все-все её неправильные действия я должна предугадать), то программа НЕ должна вылетать, никаких окошек с крестиком не должно появляться, а должно показываться "Недопустимый элемент" и неправильное значение в ячейке или эдите должно стираться. Я решила сделать это через case, ну и затупила...  Ну редко я пользуюсь этим 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  
			
			
			
			
		 | ||||
| 
 | ||||
|    Отличная идея |