Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка на ввод нечисловых символов и запятой. [D7, XP]


Страницы:   1 2 3

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]

Странное понятие об удобстве.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо