Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Программа "Защита от дураков", оператор case   Найти похожие ветки 

 
Первокурсница ©   (2010-03-13 12:27) [0]

Доброго времени суток!
У меня программа поиска элемента, вводимого в ячейки 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.

Жирным выделено то что программа мне подсвечивает.
Как исправить сиё недоразумение?


 
Anatoly Podgoretsky ©   (2010-03-13 12:38) [1]

case Key of
"0".."9": ;

Key := #0;

ShowMessage надо убрать, а то баба Маня, скажет кто из вас дура, заменить чем ни будь менее надоедливым, обычно достаточно звука Beep.

А что у тебя подсвечивает на важно, важно что говорит.


 
Anatoly Podgoretsky ©   (2010-03-13 12:39) [2]

Кстати case тут просто лишний, хватает IF


 
Первокурсница ©   (2010-03-13 12:46) [3]

Спасибо большое:)



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.047 c
15-1266775405
TUser
2010-02-21 21:03
2010.08.27
Политэкономия социализма


11-1221313480
DJ Vusal
2008-09-13 17:44
2010.08.27
Проблема OLE обращений из Delphi в Excel


15-1267536056
12
2010-03-02 16:20
2010.08.27
Виды демократии. Опробуем на игре. И видим, что не готовы..


2-1272353381
Tima
2010-04-27 11:29
2010.08.27
Путь к файлу библиотеки по открытому хэндлу


8-1204373917
dambo
2008-03-01 15:18
2010.08.27
полигон и текстура