Текущий архив: 2008.11.02;
Скачать: CL | DM;
Вниз
Проверка на ввод нечисловых символов и запятой. Найти похожие ветки
← →
Neket (2008-09-24 09:33) [0]Доброе утро. Подскажите как сделать проверку введенного текста в Edit на наличие буков и если вводится дробное число то чтобы разделитель был "," а не точка.
т.е. доллжны вводится цифры, в том числе и вещественные а если будут буквы или разделитель не запятая а точка то либо самому менять или шоб ошибку выдавало. Заранее благодарен.
← →
Vlad Oshin © (2008-09-24 09:35) [1]onKeyPress(...Key:char);
if Key not in ["0".."9",","] then Key:=#0;
← →
Сергей М. © (2008-09-24 09:38) [2]
> чтобы разделитель был "," а не точка
С пом. StringReplace замени точки на запятые, если таковые имеются.
А что за дискриминация, почему юзеру недозволено использовать в кач-ве разделителя то что ему удобней при вводе ?
> как сделать проверку
Например, с пом. TryStrToFloat
← →
Dennis I. Komarov © (2008-09-24 09:39) [3]
> Neket (24.09.08 09:33)
На каком основании ты навязываешь пользователю свой дробный разделитель? Такой софт должен быть уничтожен до инсталяции...
Использую DecimalSeporator (кажися так пишется) и FloatToStr
Так же в OnChange можно проверять что ввели, а лучше это делать по окончанию ввода
← →
Dennis I. Komarov © (2008-09-24 09:40) [4]
> и FloatToStr
наоборот...
← →
Sergey13 © (2008-09-24 09:54) [5]> [0] Neket (24.09.08 09:33)
Можно заменить TEdit на компонент, заточенный под ввод именно числовых данных.
← →
Neket (2008-09-24 10:05) [6]Всем спасибо. Вариант предложенный
Vlad Oshin © (24.09.08 09:35) [1]
подошел очень даже не плохо. Остался только один вопрос. Как плюс ковсему разрешить еще и использование BackSpase. Какой у него код?
← →
Поросенок Винни-Пух © (2008-09-24 10:08) [7]A Delete запретить?
← →
Neket (2008-09-24 10:10) [8]Нее Delit работает.
Поросенок Винни-Пух ©
- харош глумиться.
← →
Сергей М. © (2008-09-24 10:10) [9]
> Neket (24.09.08 10:05) [6]
> Вариант предложенный Vlad Oshin © (24.09.08 09:35) [1]
> подошел очень даже не плохо
В нем нет "защиты от дурака" - ничто мешает натыкать, к примеру, кучу запятых, да еще и в "неположенных местах")
К тому же ты ничего не сказал про знак вводимого числа
← →
Поросенок Винни-Пух © (2008-09-24 10:10) [10]а стрелки влево/вправо?
← →
Поросенок Винни-Пух © (2008-09-24 10:12) [11]В нем нет "защиты от дурака" - ничто мешает натыкать, к примеру, кучу запятых, да еще и в "неположенных местах")
1,000,000.99
← →
Neket (2008-09-24 10:13) [12]На знак я проверку сделал. А вот касаемо нескольких запятых, то идея хорошая надо будет тоже проверку сделать.
Так какой код у BackSpase?Поросенок Винни-Пух © (24.09.08 10:10) [10]
- работают :-)
← →
Vlad Oshin © (2008-09-24 10:17) [13]Windows.pas
VK_BACK = 8;
← →
Сергей М. © (2008-09-24 10:18) [14]
> На знак я проверку сделал
Интересно, какую ?
А код бэкспейса выясни сам - ShowMessage(IntToStr(Ord(Key)))
← →
Neket (2008-09-24 10:22) [15]
> На знак я проверку сделал
Интересно, какую ?
Ды просто запретил его вводить )))))))))))
← →
Сергей М. © (2008-09-24 10:29) [16]
> Neket (24.09.08 10:22) [15]
Так это не ты сделал, а Vlad Oshin © (24.09.08 09:35) [1])
А ты и пальцем не пошевелил)
← →
AndreyV © (2008-09-24 10:33) [17]> [15] Neket (24.09.08 10:22)
> > На знак я проверку сделал
>
> Интересно, какую ?
> Ды просто запретил его вводить )))))))))))
Хороша проверка для вещественных чисел.
А такое:
+123.456е-2
пользователю запрещщено вводить?
← →
Vlad Oshin © (2008-09-24 10:38) [18]а Е, Pi пусть на счетах посчитает предварительно :)
← →
Правильный$Вася (2008-09-24 10:43) [19]теперь остается запретить вставку из буфера обмена
← →
Правильный$Вася (2008-09-24 10:43) [20]и можно будет выкидывать на помойку
← →
Сергей М. © (2008-09-24 10:54) [21]
> Е, Pi пусть на счетах посчитает предварительно
На счетах - это даже неприлично) .. Настоящие джедаи завсегда лорарифмическую линейку пользуют для перевода из scientific-формата в денежный формат) ..
← →
Anatoly Podgoretsky © (2008-09-24 10:55) [22]А может ну его нафиг такой ввод?
← →
Сергей М. © (2008-09-24 10:57) [23]
> может ну его нафиг такой ввод?
Дык об чем и речь !
В общем случае юзеру надо дать полную свободу в тыкании любых кнопок, а проверку корректности введенной им абракадабры осуществлять при потере контролом фокуса ..
← →
Vlad Oshin © (2008-09-24 11:02) [24]не, лучше на изменение значения повесится
Если после ввода ткнут в ерунду, которая не получит фокус, но начнет вычисления?
← →
Anatoly Podgoretsky © (2008-09-24 11:03) [25]> Сергей М. (24.09.2008 10:57:23) [23]
Я так и поступаю, пусть вводят любую ерунду, мое дело отказаться в ее приеме, при том не обязательно при потере фокуса, возможно он еще не кочил ерундить, при нажатие кнопки ОК проверяю.
← →
Neket (2008-09-24 11:22) [26]Хм... Ну касаемо +123.456е-2 и т.д. Такое они вводить не будут, не смогут да оно и не надо чтобы могли вводить.
А касаемоAnatoly Podgoretsky © (24.09.08 11:03) [25]
То проверка основная как раз и проводится по нажати "Ок", просто предложенный вариант в начале является одним из этапов контроля корректности. Кстати на мой взгляд очень удобным.
← →
ASoft (2008-09-24 11:44) [27]
> Кстати на мой взгляд очень удобным
а на
> Dennis I. Komarov © (24.09.08 09:39) [3]
наплюем, да?
← →
Dennis I. Komarov © (2008-09-24 12:25) [28]
> ASoft (24.09.08 11:44) [27]
Да пусть делает чего хочет... Единственное - жалко того, кто будет пользовать эту поделку. Оно и понятно - скупой платит ...
ЗЫ Обидно когда из серьезных контор приходят такие поделки, и при том отказаться от них низя :(
Вот за это надо таких программистов бить по голове до полного просветления (или наоборот - тут уж как повезет)
← →
MsGuns © (2008-09-24 12:48) [29]Код состоит аж из 5 строк, среди которых помимо проверки на символ цифры, разделителя дроби и знака "-" есть еще при последнем проверка уже имеющегося содержимого на "-".
Самому написать ну никах ?
← →
Anatoly Podgoretsky © (2008-09-24 12:50) [30]
> Neket (24.09.08 11:22) [26]
Странное понятие об удобстве.
← →
Neket (2008-09-24 14:07) [31]Т.е. исходя из вышесказанного, наиболее правельно сделать так...
Пользователь вводит значения... Любые. Пускай хоть Войну и Мир в бедный едит вхреначит, а я должен написать "искуственный интелект" который должен распознавать что действительно он хотел ввести?
Не легче ли, на этапе ввода ограничивать пользователя в различных моментах, так сказать "Наставляя его на путь истинный" и чтобы он сам думал что вводит. В любом случае мы как программисты не сможем все предугадать все ходы "дурака" и все описать в алгоритме. Вот и стараемся сделать хоть какую-то "защиту от дурака"Anatoly Podgoretsky © (24.09.08 12:50) [30]
Поделитесь своей точкой зрения. Плз....
← →
{RASkov} © (2008-09-24 14:12) [32]> [31] Neket (24.09.08 14:07)
> а я должен написать "искуственный интелект" который должен
> распознавать что действительно он хотел ввести?
Весь этот ИИ и есть, например, StrToFloat или Val
← →
Neket (2008-09-24 14:15) [33]{RASkov} © (24.09.08 14:12) [32]
Ну а кусок примера... Как припомощи процедуры преобразования StrToFloat можно отловить ошибку?
← →
Сергей М. © (2008-09-24 14:16) [34]
> Neket (24.09.08 14:07) [31]
Только не воспринимай это как догму ..
Общий случай он и есть общий, а если требуется частный (тот или иной контроль корректности вводимых данных непосредственно в ходе ввода), то почему бы и нет ?
> не сможем все предугадать все ходы "дурака"
А и не надо)
Разработчику достаточно иметь формализованные требования тех.задания, согласованного с Заказчиком, и четко следовать этим требованиям при проектировании и реализации.
← →
Vlad Oshin © (2008-09-24 14:17) [35]Иногда бывает так, что заполнив кучу едитов, программа, пип, ругнется, потом начинаешь искать куда надо было что ввести. И это еще хорошо, если не сбросит все в 0.
Имхо, на Изменение надо вешать функцию проверки.
инициализировать значением по умолчанию, для примера.
← →
Neket (2008-09-24 14:18) [36]
А и не надо)
Разработчику достаточно иметь формализованные требования тех.задания, согласованного с Заказчиком, и четко следовать этим требованиям при проектировании и реализации.
Даааа вот в этом-то как-раз и проблема... Этого и нет ))))))))))
Вот и приходится сидеть и пытаться предугадывать ВСЕ....
← →
Neket (2008-09-24 14:20) [37]Vlad Oshin © (24.09.08 14:17) [35]
Ну это если руки уж очень криво растут, или программер ОООЧЕНЬ ленивый.
На самом деле у меня реализована проверка каждого Едита и в случае ошибки пользователь будет оповещен где именно он накосячил.
← →
Dennis I. Komarov © (2008-09-24 14:21) [38]
> Как припомощи процедуры преобразования StrToFloat можно
> отловить ошибку?
brail.dll подключи, "программист".
← →
Neket (2008-09-24 14:24) [39]Dennis I. Komarov © (24.09.08 14:21) [38]
возможно вы имели ввиду brain.dll ?
← →
{RASkov} © (2008-09-24 14:27) [40]> [33] Neket (24.09.08 14:15)
try
E:=StrToFloat(Edit.Text);
except
ShowMessage("Ошибка ввода числа "+Edit.Text);
Edit.SetFocus;
end;
А если использовать Val то можно и курсор установить на место первого ошибочного символа...
Страницы: 1 2 вся ветка
Текущий архив: 2008.11.02;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.024 c