Программа "Защита от дураков"

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Доброго времени суток! :wub:
У меня программа поиска элемента, вводимого в ячейки 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
[color="#FF0000"]Key:='';[/color]
ShowMessage('Недопустимый элемент!');
end;
end;
end.
Красным выделено то что программа мне подсвечивает.
Как исправить сиё недоразумение? :eek:oo:
 
09.11.2009
665
1
#2
Попробуй через Try

Код:
1 Try //при ошыбке должно просто пропустить
оператор
Finally //выполняетса после Try независимо от того была там ошибка или нет
оператор
End;//для Try 

2 Try //при ошыбке должно просто пропустить
оператор 
Except //выполняетса после Try если была ошибка в Try
оператор
End; //для Try
К примеру
Код:
Try
n:=StrToInt(Edit1.text);
Except
showmessage('не могу считать ячейку');
end;
 
G

Guest

#3
Спасибо огромное! :) Как здесь повысить Вам репутацию?