![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка на ввод нечисловых символов и запятой. [D7, XP]
Neket © (2008-09-24 09:33:00)Доброе утро. Подскажите как сделать проверку введенного текста в Edit на наличие буков и если вводится дробное число то чтобы разделитель был "," а не точка.
т.е. доллжны вводится цифры, в том числе и вещественные а если будут буквы или разделитель не запятая а точка то либо самому менять или шоб ошибку выдавало. Заранее благодарен.
Anatoly Podgoretsky (2008-09-24 15:18:00) [1]> Neket (24.09.2008 14:20:37) [37]
Как будет оповещен, дело не в проверке - дело в оповещение?
Anatoly Podgoretsky (2008-09-24 15:17:00) [2]> Neket (24.09.2008 14:07:31) [31]
Ты теперь в другую крайность падаешь.
Никакой искуственный ителлект и прочее не требуется, тип поля известен или целочисленный, или с плавающей запятой и попытка преобразование сразу скажет дурак пользователь или нет, не говоря уже о случаях автоматической проверки по маске, тогда уйти из поля нельзя будет. УЖАС.
Не надо ограничивать пользователя, до закрытия формы, может я хочу сформировать поле коипируя его части из других мест, например из других полей той же формы и запрет на выход не позволит это сделать.
И прикинь, что подумает пользователь - кто из вас двоих дурак?
Anatoly Podgoretsky (2008-09-24 15:03:00) [3]
> А если использовать Val то можно
Не надо, поскольку системно независима, подходит только для импорта/экспорта.
MsGuns (2008-09-24 14:41:00) [4]Пардон, вместо запятой при проверке надо поставить сепаратор
MsGuns (2008-09-24 14:38:00) [5]function CheckSymbolForFloatText(Edit: TEdit; Key: Char): Char;
begin
result := Key;
with Edit do
if not (Key in ['0'..'9','-',DecimalSeparator,Char(VK_BACK),Char(VK_TAB)]) or
((Key=',') and (Pos(Key,Text)>0)) or
((Key='-') and ((Pos(Key,Text)>0) or (SelStart>0))) then result := #0;
end;
В OnKeyPress едита
Key := CheckSymbolForFloatText(TEdit(Sender),Key)
В OnChange эдита проверка TryStrToFloat
{RASkov} (2008-09-24 14:34:00) [6]> [43] Vlad Oshin © (24.09.08 14:32)
:)
Проще тогда и в самом деле вести контроль допустимых символов. "Легче" алгоритм будет )
Vlad Oshin (2008-09-24 14:32:00) [7]procedure TForm1.Edit1Change(Sender: TObject);
var
a:double;
i:integer;
s:string;
begin
if Length(edit1.Text)=0 then exit;
if not(trystrtofloat(Edit1.Text,a)) then
begin
ShowMessage('Неправильное значение. Последний символ удален');
i:=length(edit1.Text);
s:=edit1.Text;
setlength(s,i-1);
edit1.Text:=s;
end;
end;
Neket (2008-09-24 14:31:00) [8]Ладно мужики. Спасибо. Реально благодарен всем. Просто есть люди которые программирование на хлеб зарабатываю, а есть те кому приходится время от времени ввиду того что начальство жлобится на новую штатную единицу, писать самому. Вот и такая разница в знаниях. Ещё раз всем спасибо.
Dennis I. Komarov (2008-09-24 14:28:00) [9]
> Dennis I. Komarov © (24.09.08 14:21) [38]
> возможно вы имели ввиду brain.dll ?
ее самую...
try exept - знаешь что такое?
в [2] так же есть tryStrToFloat, осталось за малым - почитать хелп, подключив библиотеку...
{RASkov} (2008-09-24 14:27:00) [10]> [33] Neket (24.09.08 14:15)
try
E:=StrToFloat(Edit.Text);
except
ShowMessage('Ошибка ввода числа '+Edit.Text);
Edit.SetFocus;
end;
А если использовать Val то можно и курсор установить на место первого ошибочного символа...
Neket (2008-09-24 14:24:00) [11]Dennis I. Komarov © (24.09.08 14:21) [38]
возможно вы имели ввиду brain.dll ?
Dennis I. Komarov (2008-09-24 14:21:00) [12]
> Как припомощи процедуры преобразования StrToFloat можно
> отловить ошибку?
brail.dll подключи, "программист".
Neket (2008-09-24 14:20:00) [13]Vlad Oshin © (24.09.08 14:17) [35]
Ну это если руки уж очень криво растут, или программер ОООЧЕНЬ ленивый.
На самом деле у меня реализована проверка каждого Едита и в случае ошибки пользователь будет оповещен где именно он накосячил.
Neket (2008-09-24 14:18:00) [14]
А и не надо)
Разработчику достаточно иметь формализованные требования тех.задания, согласованного с Заказчиком, и четко следовать этим требованиям при проектировании и реализации.
Даааа вот в этом-то как-раз и проблема... Этого и нет ))))))))))
Вот и приходится сидеть и пытаться предугадывать ВСЕ....
Vlad Oshin (2008-09-24 14:17:00) [15]Иногда бывает так, что заполнив кучу едитов, программа, пип, ругнется, потом начинаешь искать куда надо было что ввести. И это еще хорошо, если не сбросит все в 0.
Имхо, на Изменение надо вешать функцию проверки.
инициализировать значением по умолчанию, для примера.
Сергей М. (2008-09-24 14:16:00) [16]
> Neket (24.09.08 14:07) [31]
Только не воспринимай это как догму ..
Общий случай он и есть общий, а если требуется частный (тот или иной контроль корректности вводимых данных непосредственно в ходе ввода), то почему бы и нет ?
> не сможем все предугадать все ходы "дурака"
А и не надо)
Разработчику достаточно иметь формализованные требования тех.задания, согласованного с Заказчиком, и четко следовать этим требованиям при проектировании и реализации.
Neket (2008-09-24 14:15:00) [17]{RASkov} © (24.09.08 14:12) [32]
Ну а кусок примера... Как припомощи процедуры преобразования StrToFloat можно отловить ошибку?
{RASkov} (2008-09-24 14:12:00) [18]> [31] Neket (24.09.08 14:07)
> а я должен написать "искуственный интелект" который должен
> распознавать что действительно он хотел ввести?
Весь этот ИИ и есть, например, StrToFloat или Val
Neket (2008-09-24 14:07:00) [19]Т.е. исходя из вышесказанного, наиболее правельно сделать так...
Пользователь вводит значения... Любые. Пускай хоть Войну и Мир в бедный едит вхреначит, а я должен написать "искуственный интелект" который должен распознавать что действительно он хотел ввести?
Не легче ли, на этапе ввода ограничивать пользователя в различных моментах, так сказать "Наставляя его на путь истинный" и чтобы он сам думал что вводит. В любом случае мы как программисты не сможем все предугадать все ходы "дурака" и все описать в алгоритме. Вот и стараемся сделать хоть какую-то "защиту от дурака"
Anatoly Podgoretsky © (24.09.08 12:50) [30]Поделитесь своей точкой зрения. Плз....
Anatoly Podgoretsky (2008-09-24 12:50:00) [20]
> Neket (24.09.08 11:22) [26]
Странное понятие об удобстве.