![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странная ошибка [D7, XP]
Quadro © (2005-11-25 14:30:00)Добрый день ещё раз!.....столкнулся с такой проблемой...есть маска времени...есть обработчик нажатия клавиши..
procedure TForm1.TimeOutKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) and (TimeOut.Text '') then
begin
try
StrToTime(TimeOut.Text);
TimeOut.Enabled:=False;
except
on EConvertError do
begin
MessageDlg('Íåâåðíî çàäàíî âðåìÿ ðàçîãðåâà!',mtWarning,[mbOk],0);
Exit;
end;
end;
end;
end;
Если намерено ввожу неверное время то,выскакивает окно предупреждения 'Íåâåðíî çàäàíî âðåìÿ ðàçîãðåâà!' и следом за ним окно с таинственной надписью Invalid input value. Use escape key to abandon changes....не могу понять в чём же дело....настройка маски - !90:00;1;_
Quadro (2005-11-25 17:14:00) [1]Вот этого то я и не знал!!!...Спасибо вам всем за проявленное терпение=))...
Digitman (2005-11-25 17:06:00) [2]
> это связано с особенностью маски проверять соответствие
> при потере фокуса????
ну можно и так сказать.
потеря фокуса сопровождается соответствующим win-сообщением в адрес окна маск-контрола, при обработке этого сообщения вызывается соотв.метод TCustomMaskEdit.ValidateEdit(), в которой и возбуждается исключение, если введенные юзером данные инвалидны
Quadro (2005-11-25 16:58:00) [3]Алилуйя,братья!!!!!!!!!!=))))всё оказалось так просто!!!!!Только я не совсем понял,почему исключение EDBEditError можно перехватить только в Application.OnException??это связано с особенностью маски проверять соответствие при потере фокуса????
Leonid Troyanovsky (2005-11-25 16:17:00) [4]
> Quadro (25.11.05 15:54) [19]
> Продолжает выскакивать душещипательное предупреждение Invalid
> input value. Use escape key to abandon changes даже в этом
> случае
Чукча писатель?
--
Regards, LVT.
Digitman (2005-11-25 16:15:00) [5]
> ConvertError я воткнул типа если вдруг СтрТуТайм завозмущается
да до него дело не доходит даже !
как и до обработки BitBtn1Click в принципе ..
упомянутое исключение (EDBEditError) возбуждается в момент потери MaskEdit-компонентом фокуса ввода, при этом в коде компонента происходит проверка корректности введенных данных и в случае несоответствия как раз и возбуждается исключение , при этом фокус остается на компоненте
перехватить исключение можно, например, в Application.OnException
Quadro (2005-11-25 15:55:00) [6]ConvertError я воткнул типа если вдруг СтрТуТайм завозмущается=)
Quadro (2005-11-25 15:54:00) [7]Продолжает выскакивать душещипательное предупреждение Invalid input value. Use escape key to abandon changes даже в этом случае
procedure TForm1.BitBtn1Click(Sender: TObject);
var
a:TDateTime;
begin
try
a:=StrToTime(MaskEdit1.Text);
except
on EDBEditError do ShowMessage('!!!');
on EConvertError do ShowMessage('???')
else ShowMessage('?!?!?');
end;
end;
Настройка маски - !90:00;1;_...намеренно ввожу неправиьное время 00...результат - никакой обработки исключения по видимому не происходит...
Digitman (2005-11-25 15:51:00) [8]
> Quadro (25.11.05 15:42) [16]
ну тебе же уже сказали, что EConvertError НЕ будет возбуждено в ДАННОЙ ситуации ! И ждать его тут попросту бессмысленно .. А ты вновь его обработчик в except воткнул) ... ну и не тормоз ли после этого ?)
если ты сомневаешься в классе исключения (или не знаешь его, а по исходникам шарить лень), то выяснить это проще пареной репы :
on e:exception do ShowMessage(e.ClassName + ' ' + e.message);
Reindeer Moss Eater (2005-11-25 15:43:00) [9]Что значит не работает?
Quadro (2005-11-25 15:42:00) [10]Я пытаюсь понять, почему не работает мой пример...если Вы столь большой профессионал и Вас раздражают начинающие - зачем заглядывать в соответствующий раздел форума?
Reindeer Moss Eater (2005-11-25 15:34:00) [11]Ок...вот этот пример должен работать?
Ты спецом прикидываешься тормозом?
Quadro (2005-11-25 15:33:00) [12]точнее даже так..
procedure TForm1.BitBtn1Click(Sender: TObject);
var
a:TDateTime;
begin
try
a:=StrToTime(MaskEdit1.Text);
except
on EDBEditError do ShowMessage('!!!');
on EConvertError do ShowMessage('???');
end;
end;
end.
Quadro (2005-11-25 15:32:00) [13]Ок...вот этот пример должен работать?
procedure TForm1.BitBtn1Click(Sender: TObject);
var
a:TDateTime;
begin
try
a:=StrToTime(MaskEdit1.Text);
except
on EDBEditError do ShowMessage('!!!');
end;
end;
end.
Leonid Troyanovsky (2005-11-25 15:18:00) [14]
> Quadro (25.11.05 15:00) [10]
> так ведь если не
> введены какие то ожидаемые символы - должно сгенерироваться
> исключение EConvertError=> должно пойматься в обработчике
> этого самого исключения....верно?
TMaskEdit генерирует EDBEditError.
См. также
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/eec55fc9cd11d3c3
--
Regards, LVT.
Reindeer Moss Eater (2005-11-25 15:03:00) [15]должно сгенерироваться исключение EConvertError=>
С какого перепугу ЭТО исключение должнго сгенерироваться?
Quadro (2005-11-25 15:00:00) [16]"Можно предположить, что маску не устраивают, что
не введены все символы, ожидаемые ею."..так ведь если не введены какие то ожидаемые символы - должно сгенерироваться исключение EConvertError=> должно пойматься в обработчике этого самого исключения....верно?
"И почему, собс-но, проверка в OnKeyPress?"...вынести в отдельную функцию?
Reindeer Moss Eater (2005-11-25 14:57:00) [17]Значит исключение не EConvertError
А обрабатываешь ты только его.
Все остальное попадает в обработчик по умолчанию
Quadro (2005-11-25 14:55:00) [18]весь фокус в том, что если запускать из под винды - результат тот же..Invalid input value. Use escape key to abandon changes и гуляй Вася=((.
Leonid Troyanovsky (2005-11-25 14:54:00) [19]
> Quadro (25.11.05 14:40) [2]
> так вот я и спрашиваю,что же маску не устраивает??если Вам
> не трудно,не могли бы вы меня просветить?
Можно предположить, что маску не устраивают, что
не введены все символы, ожидаемые ею.
И почему, собс-но, проверка в OnKeyPress?
--
Regards, LVT.
Reindeer Moss Eater (2005-11-25 14:47:00) [20]Так.
Если не запускать из под среды.
Иначе - не так.