Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Программа "Защита от дураков", оператор case  (Прочитано 14670 раз)
0 Пользователей и 1 Гость смотрят эту тему.
СвоЕобразнаЯ
Участник

ru
Offline Offline

« : 13-03-2010 09:40 » 

Доброго времени суток! Люблю!
У меня программа поиска элемента, вводимого в ячейки 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=red]Key:='';[/color]
ShowMessage('Недопустимый элемент!');
end;
end;
end.
Красным выделено то что программа мне подсвечивает.
Как исправить сиё недоразумение? Да-да
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 13-03-2010 10:16 » 

Красным выделено то что программа мне подсвечивает.

Повтори что ты сказала...

зы А программа Улыбаюсь тебе кроме подсветки ничего не говорит?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 13-03-2010 10:30 » 

и ... расскажи пожалуйста о типе char
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #3 : 13-03-2010 10:35 » 

С этим я уже разобралась, вот Улыбаюсь):
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    '0'..'9': ;
  else
    begin
      Key := #0;
      ShowMessage('Недопустимый элемент!');
    end;
    end;
    end;
Теперь вот думаю как-то же самое сделать со StringGrid'ом Быть такого не может
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 13-03-2010 10:41 » 

не боги горшки обжигают
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zubr
Гость
« Ответ #5 : 13-03-2010 11:13 » 

Первокурсница, у TStringGrid также есть событие OnKeyPress.
Записан
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #6 : 13-03-2010 11:22 » 

Спасибо, сделала:) А как сделать так:
Если Edit1.Text НЕ Integer ТО <СООБЩЕНИЕ>

Как в Делфи пишется этот оператор? Is not Integer?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 13-03-2010 11:27 » 

Первокурсница, а в каком языке есть конструкция
Is not Integer
?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #8 : 13-03-2010 11:32 » 

 вроде в запросах SQL...
Записан
zubr
Гость
« Ответ #9 : 13-03-2010 11:33 » 

Первокурсница, я тебе уже давал подсказку - StrToIntDef. Если будет возвращено дефолтное значение - то не Integer.
Записан
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #10 : 13-03-2010 11:38 » 

zubr, буду разбираться, спасибо за совет =)
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 13-03-2010 21:33 » new

А maskedit в этом случае не подходит?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines