Форум: "Начинающим";
Текущий архив: 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