![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обработчик исключительной ситуации
Дева © (2005-11-14 22:47:00)Помогите, пожалуйста, написать обработчик исключительной ситуации. Совершенно не могу понять, как его писать, может на примере разберусь.
Задача:
Имеется текстовое поле Edit1, в которое вводятся данные. При нажатии на кнопку Button1:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i:=StrToInt(Edit1.Text);
end;
Если в поле Edit1 будут написаны буквы к примеру, то сработает исключительная ситуация и обрубится выполнение всей программы. Надо этого избежать, помогите.
Leonid Troyanovsky (2005-11-17 14:18:00) [1]
> Дева © (17.11.05 13:55) [27]
> Еще вот что, как сделать панель с крестиком в правом верхнем
> углу? То усть, чтобы она закрывалась?
IMHO, вопрос достоин отдельной темы, в которой нужно попытаться
объяснить, что есть искомая панель (и на зачем она нужна).
Или, на худой конец, нарисовать.
--
Regards, LVT.
Дева (2005-11-17 13:55:00) [2]Еще вот что, как сделать панель с крестиком в правом верхнем углу? То усть, чтобы она закрывалась?
Leonid Troyanovsky (2005-11-17 13:43:00) [3]
> Дева © (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.
Skyle (2005-11-17 13:32:00) [4]
> ButtonOk.ModalResult:=mrOk;//Вот присваиваю значение mrOk
убрать выделенное?
Дева (2005-11-17 13:18:00) [5]Помогите, пожалуйста!! Совсем не могу понять. Я вызываю методом 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, спасибо, буду пробовать
Leonid Troyanovsky (2005-11-17 12:20:00) [6]
> Дева © (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 12:01:00) [7]Подскажите еще вопрос. А если надо ввести в текстовое поле TEdit строку, длиной 13 символов и состоящую только из цифер, как это проверить? Ну длину функцией Length я определю, но как узнать, что она только из цифер?
Дева (2005-11-17 03:37:00) [8]Книг нет и это печально. На самом деле я купила себе книгу, что-то типа Delphi 5. И сравнила - один в один манулка по второму. Теперь не вижу смысл переводить деньги
Virgo_StyleСпасибо большое. Это и правда надежнее.
А в какой ситуации есть потребность использовать методы типа EConvertError. И в какой есть необходимость писать свой?
Virgo_Style (2005-11-16 20:29:00) [9]msguns © (16.11.05 16:24) [16]
imho, надежнее использовать TryStrTo...
Плохиш (2005-11-16 17:30:00) [10]
> Дева © (16.11.05 15:25) [12]
> Плохиш, а насчет того, что обрубается, я нисколечки не вру!
Врёшь, врёшь. Там написано, что произошла ошибка такая-то и выполнение программы приостановлено, выполнение может быть продолжено по-шагово или нажатием "Старт".
Игорь Шевченко (2005-11-16 16:50:00) [11]msguns © (16.11.05 16:24) [16]
:))) вот бы такой компилятор
Amoeba (2005-11-16 16:47:00) [12]
> Ведь есть же куча функций StrToXXXDef
Если у автора вопроса D5, то там эта ф-ия еще не появилась
msguns (2005-11-16 16:24:00) [13]Применительно к сабжевой ситуации ИМХО не стоит для проверки введенного значения в каждомконтроле ставить защищенный блок. Ведь есть же куча функций StrToXXX Def
Для данного случая вполне подходит такой вариант:
with Edit1 do
if (Text>'') and (if StrToIntDef(Text,-1)=-1) then
begin
ShowMessage('Ошибка !');
SetFocus; SelectAll;
end;
Игорь Шевченко (2005-11-16 16:09:00) [14]Digitman © (16.11.05 15:29) [13]
> им давно уже место на гвоздике в сортире.
Это ты, Сергей, погорячился. Потому как написание обработчика исключительной ситуации относится к книгам по первому Delphi.
Tonich (2005-11-16 15:45:00) [15]
> Tonich. А в каких же это ситуациях мы краснеем?
ну это не тот форум что бы это обсуждать ))
> А то у меня все книги по второму дельфи
а вот это действительно печально как-то...
Digitman (2005-11-16 15:29:00) [16]
> то у меня все книги по второму дельфи
им давно уже место на гвоздике в сортире.
неужто все так печально и нет ни резона ни возможности приобрести из соотв.литературы что-нть посвежее ?
хотя ключевые концепции в Делфи и по сей день не изменились, так что зерно "разумного-доброго-вечного" и там, в Д2, найти можно...
Дева (2005-11-16 15:25:00) [17]Sergey Masloff[1]
Как запретить ввод букв?
Джо, большое спасибо, что помог, хоть ты понял. А то у меня все книги по второму дельфи, а то что там написано, где галочку снимать, не соответствует моему (кажется, пятому). У меня теперь все работает, теперь смогу разобраться с тем, что же все-таки предсавляет из себя обработчик исключительной ситуации:)
Tonichи Плохиш
Хватить глумится. Я же помощи просила, вон Джо, например, без глума понял, в чем проблема...
Плохиш, а насчет того, что обрубается, я нисколечки не вру!
Tonich. А в каких же это ситуациях мы краснеем?
Tonich (2005-11-16 12:28:00) [18]неее, они все краснеют )) особенно в определенных ситуациях )))))
Плохиш (2005-11-16 11:57:00) [19]Мне больше фраза "и обрубится выполнение всей программы" нравиться, ведь врёт и не краснеет, хотя может и краснеет :-)
Tonich (2005-11-16 11:40:00) [20]
> Может всё-таки соизволишь прочитать, что в этот момент отладчик
> тебе сообщает и постараешься понять смысл этого сообщения?
>
а нафига???
она ж
> просто хочу разобраться с тем, как писать обработку исключительной
> ситуации
а тут еще читать всякие сообщения компилятора...