delphi выйти из процедуры

Навигация по первой букве:
Навигация по Unit:

Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures

Навигация по категории:
Реклама:
Exit
Процедура
Осуществляет выход из функции или процедуры System unit
procedure Exit ;
Описание
Процедура Exit немедленно завершает выполнение текущей функции или процедуры.

При выходе из функции, результат содержит последнее значение.

Предупреждение: используйте с предостережением — это делает обслуживание кода трудным.

Похожие команды
Break Выполняет выход из одного цикла

Continue Заставляет перейти к следующей итерации цикла

Goto Вызывает скачок к метке, независимо от вложения

Halt Заканчивает программу с дополнительным диалогом.

RunError Заканчивает программу с диалогом ошибки

При выходе из функции, результат содержит последнее значение.

Предупреждение: используйте с предостережением — это делает обслуживание кода трудным.

Похожие команды
Break Выполняет выход из одного цикла

Continue Заставляет перейти к следующей итерации цикла

Goto Вызывает скачок к метке, независимо от вложения

Halt Заканчивает программу с дополнительным диалогом.

RunError Заканчивает программу с диалогом ошибки

Добрый вечер, Мастера! Подскажите где в моем коде ошибка. Мне необходимо на возникновение ошибки при конвертировании корректно выйти из процедурs? чтобы можно бвыло исправить ошибку без аварийной остановки и системного диалога об ошибке.

procedure TForm1.MyProcedure();
begin
try
Edit2.Text := FloatToStr(Edit1.Text);
except
on EConvertError do
Exit;
end;
end;

procedure TForm1.Create(Sender : Object);
begin
Edit1.Text := «0.6»; // здесь я умышленно ставлю ошибку вместо запятой точку
MyProcedure();
end;


Dr. Andrew ( 2007-09-20 18:48 ) [1]

Извините допустил ошибку следует код читать так:

procedure TForm1.MyProcedure();
begin
try
Edit2.Text := FloatToStr(StrToFloat(Edit1.Text));
except
on EConvertError do
Exit;
end;
end;

procedure TForm1.Create(Sender : Object);
begin
Edit1.Text := «0.6»; // здесь я умышленно ставлю ошибку вместо запятой точку
MyProcedure();
end;


Плохиш © ( 2007-09-20 18:55 ) [2]

procedure TForm1.MyProcedure();
begin
try
Edit2.Text := FloatToStr(Edit1.Text);
except
on E:Exception do
LogWrite(«Эк, кого-то закосячило. Обшибка: » + E.ClassName + «: » + E.Message);
end;
end;


Dr. Andrew ( 2007-09-20 19:16 ) [3]

нет, но смысл же не втом чтобы записать просто число, а в том чтобы можно было исправитьзапись в редактируемом поле если вместо запятой поставлена точка и при этом не выскакивала аварийная системная ошибка о неверном конвертировании. Спасибо


Anatoly Podgoretsky © ( 2007-09-20 19:36 ) [4]


Korneley © ( 2007-09-20 19:59 ) [5]

А вот как вариант?
1. Выставить DecimalSeparator как надо.
2. На Экцепте возвратить фокус в Едит (с сообщением. )


Однокамушкин ( 2007-09-20 21:45 ) [6]

По умолчанию дельфийский отладчик сообщает о любом исключении, даже если оно потом обрабатывается в try/except, и вы, скорее всего, сообщение отладчика ошибочно называете системным. Отключите опцию Stop on Delphi Exception в окне ToolsDebugger options на странице Language exceptions. или просто запустите программу не из-под дельфей


© ( 2007-09-21 02:10 ) [7]

> [0] Dr. Andrew (20.09.07 18:45)

procedure TForm1.MyProcedure();
begin
try
Edit2.Text := FloatToStr(StrToFloat(Edit1.Text));
except
raise; //Возбуждаем ошибку в вызывающей процедуре
end;
end;

procedure TForm1.Create(Sender : Object);
begin
Edit1.Text := «0.6»; // здесь я умышленно ставлю ошибку вместо запятой точку
try
MyProcedure();
except
ShowMessage(«Ошибка ввода значения в эдит1»); //Обрабатываем ее(ошибку)
Edit1.SetFocus;
end;
end;


Германн © ( 2007-09-21 02:16 ) [8]


> Dr. Andrew (20.09.07 19:16) [3]
>
> нет, но смысл же не втом чтобы записать просто число, а
> в том чтобы можно было исправитьзапись в редактируемом поле
> если вместо запятой поставлена точка и при этом не выскакивала
> аварийная системная ошибка о неверном конвертировании. Спасибо
>

А обработка OnKeyDown в «редактируемом поле » не помогает?


© ( 2007-09-21 02:57 ) [9]

> procedure TForm1.Create(Sender : Object);
> begin
> Edit1.Text := «0.6»; // здесь я умышленно ставлю ошибку вместо запятой точку
> try
> MyProcedure();
> except
> ShowMessage(«Ошибка ввода значения в эдит1»); //Обрабатываем ее(ошибку)
> Edit1.SetFocus;
> end;
> end;

А я что-то и не обратил внимания, что код на создании формы. Хоть эта и ошибка в данном случае,
но я другое хотел показать. Впрочем это было конкретно ответ на вопрос в сабже,
а решений конкретной проблемы из примера к вопросу, тоже предложили несколько вариантов. 🙂

Оцените статью