Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

обработчик исключительной ситуации   Найти похожие ветки 

 
Дева ©   (2005-11-14 22:47) [0]

Помогите, пожалуйста, написать обработчик исключительной ситуации. Совершенно не могу понять, как его писать, может на примере разберусь.

Задача:
Имеется текстовое поле Edit1, в которое вводятся данные. При нажатии на кнопку Button1:

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i:=StrToInt(Edit1.Text);
end;

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


 
Sergey Masloff   (2005-11-14 22:50) [1]

к примеру можно запретить ввод букв ;-)
или почитать в справке про try...except...end. И пример тоже там есть


 
default ©   (2005-11-14 22:56) [2]


procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  try
    i := StrToInt(Edit1.Text);
  except
    ShowMessage("Это не число")
  end;
end;

P.S. а что одногруппники помочь не могут?


 
Германн ©   (2005-11-15 01:10) [3]

А  если применить Val(), то можно ещё в сообщении об ошибке написать, что "данный символ" не допустим!


 
Германн ©   (2005-11-15 01:14) [4]

Кстати при применении Val() "исключительной ситуации" не будет.


 
Дева ©   (2005-11-16 03:09) [5]

Я просто хочу разобраться с тем, как писать обработку исключительной ситуации.

При данном коде:

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
begin
 try
   i := StrToInt(Edit1.Text);
 except
   ShowMessage("Это не число")
 end;
end;

все-равно появляется ошибка и работа приложения останавливается.

Я хочу понять, я что-то нетак пишу, или в настройках проекта или среды интегрирования необходимо что-то включить, чтобы все работало???


 
MRAk ©   (2005-11-16 03:20) [6]

кхм делфи на try..except все равно ругается попробуй запустить уже скомпелированный проэкт(тоесть не из под делфи)


 
Джо ©   (2005-11-16 03:23) [7]


> [5] Дева ©   (16.11.05 03:09)

Tools/Debugger Options/Language Exceptions убираем галку Stop on Delphi Exceptions.


 
Плохиш ©   (2005-11-16 11:15) [8]


> Дева ©   (16.11.05 03:09) [5]
> все-равно появляется ошибка и работа приложения останавливается.

Может всё-таки соизволишь прочитать, что в этот момент отладчик тебе сообщает и постараешься понять смысл этого сообщения?


 
Tonich ©   (2005-11-16 11:40) [9]


> Может всё-таки соизволишь прочитать, что в этот момент отладчик
> тебе сообщает и постараешься понять смысл этого сообщения?
>

а нафига???

она ж


> просто хочу разобраться с тем, как писать обработку исключительной
> ситуации


а тут еще читать всякие сообщения компилятора...


 
Плохиш ©   (2005-11-16 11:57) [10]

Мне больше фраза "и обрубится выполнение всей программы" нравиться, ведь врёт и не краснеет, хотя может и краснеет :-)


 
Tonich ©   (2005-11-16 12:28) [11]

неее, они все краснеют )) особенно в определенных ситуациях )))))


 
Дева ©   (2005-11-16 15:25) [12]

Sergey Masloff [1]
Как запретить ввод букв?

Джо, большое спасибо, что помог, хоть ты понял. А то у меня все книги по второму дельфи, а то что там написано, где галочку снимать, не соответствует моему (кажется, пятому). У меня теперь все работает, теперь смогу разобраться с тем, что же все-таки предсавляет из себя обработчик исключительной ситуации:)

Tonich и Плохиш
Хватить глумится. Я же помощи просила, вон Джо, например, без глума понял, в чем проблема...  

Плохиш, а насчет того, что обрубается, я нисколечки не вру!

Tonich. А в каких же это ситуациях мы краснеем?


 
Digitman ©   (2005-11-16 15:29) [13]


> то у меня все книги по второму дельфи


им давно уже место на гвоздике в сортире.

неужто все так печально и нет ни резона ни возможности приобрести из соотв.литературы что-нть посвежее ?

хотя ключевые концепции в Делфи и по сей день не изменились, так что зерно "разумного-доброго-вечного" и там, в Д2, найти можно...


 
Tonich ©   (2005-11-16 15:45) [14]


> Tonich. А в каких же это ситуациях мы краснеем?

ну это не тот форум что бы это обсуждать ))


> А то у меня все книги по второму дельфи

а вот это действительно печально как-то...


 
Игорь Шевченко ©   (2005-11-16 16:09) [15]

Digitman ©   (16.11.05 15:29) [13]


> им давно уже место на гвоздике в сортире.


Это ты, Сергей, погорячился. Потому как написание обработчика исключительной ситуации относится к книгам по первому Delphi.


 
msguns ©   (2005-11-16 16:24) [16]

Применительно к сабжевой ситуации ИМХО не стоит для проверки введенного значения в каждом контроле ставить защищенный блок. Ведь есть же куча функций StrToXXXDef

Для данного случая вполне подходит такой вариант:

with Edit1 do
  if (Text>"") and  (if StrToIntDef(Text,-1)=-1) then
    begin
      ShowMessage("Ошибка !");
      SetFocus; SelectAll;
    end;


 
Amoeba ©   (2005-11-16 16:47) [17]


> Ведь есть же куча функций StrToXXXDef

Если у автора вопроса D5, то там эта ф-ия еще не появилась


 
Игорь Шевченко ©   (2005-11-16 16:50) [18]

msguns ©   (16.11.05 16:24) [16]

:))) вот бы такой компилятор


 
Плохиш ©   (2005-11-16 17:30) [19]


> Дева ©   (16.11.05 15:25) [12]
> Плохиш, а насчет того, что обрубается, я нисколечки не вру!

Врёшь, врёшь. Там написано, что произошла ошибка такая-то и выполнение программы приостановлено, выполнение может быть продолжено по-шагово или нажатием "Старт".


 
Virgo_Style ©   (2005-11-16 20:29) [20]

msguns ©   (16.11.05 16:24) [16]

imho, надежнее использовать TryStrTo...


 
Дева ©   (2005-11-17 03:37) [21]

Книг нет и это печально. На самом деле я купила себе книгу, что-то типа Delphi 5. И сравнила - один в один манулка по второму. Теперь не вижу смысл переводить деньги

Virgo_Style Спасибо большое. Это и правда надежнее.

А в какой ситуации есть потребность использовать методы типа EConvertError. И в какой есть необходимость писать свой?


 
Дева ©   (2005-11-17 12:01) [22]

Подскажите еще вопрос. А если надо ввести в текстовое поле TEdit строку, длиной 13 символов и состоящую только из цифер, как это проверить? Ну длину функцией Length я определю, но как узнать, что она только из цифер?


 
Leonid Troyanovsky ©   (2005-11-17 12:20) [23]


> Дева ©   (17.11.05 12:01) [22]

> TEdit строку, длиной 13 символов и состоящую только из цифер,
>  как это проверить? Ну длину функцией Length я определю,
>  но как узнать, что она только из цифер?


http://rsdn.ru/?Forum/?mid=626935

Ну, а ConvertInput нужно написать свою, с учетом вхождения
только цифр: (s[i] in ["0".."9]) and Length(s) <=13

--
Regards, LVT.


 
Дева ©   (2005-11-17 13:18) [24]

Помогите, пожалуйста!! Совсем не могу понять. Я вызываю методом ShowModal форму, на которой расположена кнопка Ok. Изначально ModalResult = mrNone, это нужно для того, чтобы закрытие формы и выполнение дальнейшего кода происходило лишь в том случае, когда данные в полях TEdit соответствовали требованиям, тогда ModalResult устанавливается в значение mrOk. Но тут у меня проблема - при выполнении всех требований нажимаю на кнопку хорошо и ничего не происходит, приходится нажимать второй раз. Тогда все происходит так, как должно было происходить. Почему? Где моя ошибка
модуль Client

procedure TFormClient.EditPMClick(Sender: TObject);
begin
with DlgClientForm do
 begin
   Edit1.Text:=ADOQueryClient.Fields.Fields[1].AsString;
   Edit2.Text:=ADOQueryClient.Fields.Fields[2].AsString;
   ButtonOk.ModalResult:=mrNone;//устанавливаю значение ModalResult
 end;
//вот вызов другой формы с проверкой того, какая кнопка нажата
if DlgClientForm.ShowModal=mrOk then
 begin
 ADOQueryClient.Edit;
 ADOQueryClient.Fields.Fields[1].AsString:=DlgClient.Cl1;
 ADOQueryClient.Fields.Fields[2].AsString:=DlgClient.Cl2;
 ADOQueryClient.Post;
 end;
end;

модуль DlgClient

procedure TDlgClientForm.ButtonOkClick(Sender: TObject);
begin
if Length(Edit1.Text) <> 13 then
       begin
       ShowMessage("длина должна быть равна 13");
       Edit1.SetFocus;
       end
 else
   begin
   ButtonOk.ModalResult:=mrOk;//Вот присваиваю значение mrOk
   Cl1:=Edit1.Text;
   Cl2:=Edit2.Text;
   end;
end;

P. S. Leonid Troyanovsky, спасибо, буду пробовать


 
Skyle ©   (2005-11-17 13:32) [25]


> ButtonOk.ModalResult:=mrOk;//Вот присваиваю значение mrOk

убрать выделенное?


 
Leonid Troyanovsky ©   (2005-11-17 13:43) [26]


> Дева ©   (17.11.05 13:18) [24]

> procedure TDlgClientForm.ButtonOkClick(Sender: TObject);
>
> begin
> if Length(Edit1.Text) <> 13 then
>        begin
>        ShowMessage("длина должна быть равна 13");
>        Edit1.SetFocus;
>        end
>  else
>    begin
>    ButtonOk.ModalResult:=mrOk;//Вот присваиваю значение
> mrOk



Немного не так.
Во-первых, кнопке ModalResult = mrOK присваивается заранее,
например, в design time.

А если надо отменить закрытие формы, то после, скажем,
ShowMessage надо сделать {Self.}ModalResult := mrNone.

--
Regards, LVT.


 
Дева ©   (2005-11-17 13:55) [27]

Еще вот что, как сделать панель с крестиком в правом верхнем углу? То усть, чтобы она закрывалась?


 
Leonid Troyanovsky ©   (2005-11-17 14:18) [28]


> Дева ©   (17.11.05 13:55) [27]
> Еще вот что, как сделать панель с крестиком в правом верхнем
> углу? То усть, чтобы она закрывалась?


IMHO, вопрос достоин отдельной темы, в которой нужно попытаться
объяснить, что есть искомая панель (и на зачем она нужна).
Или, на худой конец, нарисовать.

--
Regards, LVT.



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

Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.037 c
2-1132294114
Baraban
2005-11-18 09:08
2005.12.04
MyDac


5-1114511915
Бывший студент
2005-04-26 14:38
2005.12.04
Свойство предка


6-1124950549
yasny
2005-08-25 10:15
2005.12.04
TIdSMTP получение поддтверждения о доставке


2-1132071932
AntonXXX
2005-11-15 19:25
2005.12.04
Процедура при клике


3-1129707692
DancerMan
2005-10-19 11:41
2005.12.04
Выполнить действие, если курсор находится на записи более 1сек.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский