Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2011, 10:53   #1
axell24
 
Регистрация: 21.01.2011
Сообщений: 3
По умолчанию Не понятно по каким причинам не работает защита от дурака

В программе предусмотрен механизм защиты от не правильных действий человека, это уже третья программа где я использую этот способ, но в данном случае он почему-то не работает. Не могу понять почему.

P. S. Нужно сделать так, чтобы пользователь случайно не ввел буквы.
Код:
procedure TBaseForm.bNextClick(Sender: TObject);
Var  i, a : Integer;

begin
try   // Начало защищенного блока
  a := StrToInt(edPrOtv.Text); // Переводим строку в целое число
except  // Обработка ошибки
ShowMessage('Ошибочная запись числа');
Exit;
end;
  inc(NumVopr); // Увеличиваем номер вопроса на 1
  // Выводим в метку номер текущего вопроса и общее
// количество вопросов в виде "1/30"
  lNumVopr.Caption := IntToStr(NumVopr)+'/'+IntToStr(KolVopr);
  //Сохраняем в массиве текст вопроса,  возможных ответов и
  // правильного ответа
  TecStr[1]:= Memo1.Text;
  TecStr[2]:= edOtv1.Text;
  TecStr[3]:= edOtv2.Text;
  TecStr[4]:= edOtv3.Text;
  TecStr[5]:= edOtv4.Text;
  TecStr[6]:= edPrOtv.Text;
  // Записываем в файл вопрос и ответы
  For i := 1 to 6 do
     WriteLn(f, TecStr[i]);
  // Подготавливаем окно к новому вводу
  Memo1.Clear;
  edOtv1.Clear;
  edOtv2.Clear;
  edOtv3.Clear;
  edOtv4.Clear;
  edPrOtv.Clear;
  Memo1.SetFocus;
    // Если последний вопрос,
    //  то изменяем заголовок кнопки "Следующий…" на "Завершить"
  If (NumVopr = KolVopr) Then bNext.Caption := 'Завершить';
  // Проверяем, если тест создан, то завершаем работу
  If NumVopr>KolVopr Then
   Begin
     CloseFile(f);
     ShowMessage('Тест создан!');
     lNumVopr.Caption := '';
     sbSave.Visible := False;
     Panel1.Visible := True;
     Panel2.Visible := False;
     edNameTest.Text := '';
     edKolVopr.Text := '';
     Close;
     MainForm.Show;
   end;


end;

Последний раз редактировалось axell24; 28.10.2011 в 12:40.
axell24 вне форума Ответить с цитированием
Старый 28.10.2011, 12:47   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Может Эдиты попутал? Вообще есть компонент в который по определению можно вводить только цифры и ничего более. На выходе из него сразу идет Integer.
Вот альтернативный вариант: http://www.delphi-manual.ru/digit.php?com=yes
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.10.2011, 15:30   #3
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Привет! Попробуй такой метод, при событии OnKeyPress напиши -
Код:
if not (Key in ['0'..'9']) then
   Key:=#0;
Будут вводиться только цифры!
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 28.10.2011, 16:19   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

потому что вводишь не в тот edit (не в edPrOtv ) а в том который проверяешь все ОК.
для проверки добавь сразу при входе (первой строкой)
Код:
showMessage((sender as Tcomponent).name);
и у тебя будет ИМЯ компонента в который ты вводишь.
Цитата:
Код:
procedure TBaseForm.bNextClick(Sender: TObject);
Var  i, a : Integer;

begin
try   // Начало защищенного блока
  a := StrToInt(edPrOtv.Text); // Переводим строку в целое число
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 29.10.2011, 08:18   #5
alex_sed
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 11
По умолчанию

Не надо никаких защищенных режимов
Проще пользоваться функцией
a:=StrToIntDef(edPrOtv.Text, 0); // Если не число вернет 0
if a=0 then
begin
ShowMessage('Ошибочная запись числа');
Exit;
end;
alex_sed вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
защита от дурака phasha Помощь студентам 5 03.10.2011 11:45
Защита от дурака Ericnex Помощь студентам 2 13.04.2011 18:35
Не понятно как работает программа на рекурсию. Kroleg Помощь студентам 1 26.03.2011 18:06
По каким причинам антивирусы палят не вирусы?? Вавел из ГМТУ Свободное общение 14 01.07.2009 12:45