|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как сделать проверку вводимых символов в Edit
Мне нужно сделать, чтобы при вводе данных в Eit (я использую RzEdit) фильтровались вводимые символы, мне надо только цифры и точка или запятая (в зависимости от разделителя целой и дробной части в настройках региональных стандартов) пробовал RzNumericEdit вводились данные нормально, но после происходило округление до целой части, мне надо два знака после запятой. Подскажите пожалуйста! Спасибо!
|
#2
|
||||
|
||||
Скорее всего лучше настроить правильно RzNumericEdit, но если не получается, то можно на KeyPress сделать такую проверку
Код:
if not (Key in ['0'..'9','.',',']) then Key := #0; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
Страдалецъ, я б чуток видоизменил дабы не мучиться с разделителем:
Код:
if Key in [',', '.'] then Key := DecimalSeparator; if not (Key in ['0'..'9',DecimalSeparator, #8]) then Key := #0; //Спасибо Aristarh Dark за уместное напоминание:) Последний раз редактировалось dr. F.I.N., 17.05.2010 в 18:58. |
#4
|
||||
|
||||
И все всегда забывают про chr(8)
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
||||
|
||||
Что написано клавой, каким-то #8 стерто быть не должно
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
У меня такой вопрос - а отрицательные числа какбэ кто обрабатывать будет? И проверка, что пользователь не введёт "многоточие"?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
||||
|
||||
Цитата:
Цитата:
|
#8
|
||||
|
||||
конечно хотелось бы и многоточие проверять даже если точки (запятые) введены не подряд.
а отрицательные мне не нужны... p.s. спасибо пока всё работает))) Последний раз редактировалось oxy-fox, 18.05.2010 в 03:48. |
#9
|
||||
|
||||
Кстати разобрался с RzNumericEdit. Надо вводить в DisplayFormat
Код:
,0.00;(,0) Код:
,0.##;(,0) Жизнь - не те дни, что прошли, а те, что запомнились! Последний раз редактировалось oxy-fox, 22.05.2010 в 16:51. |
#10
|
||||
|
||||
Функция устанавливает "правильный" decimal separator(разделитель целой и дробной части), контролирует кол-во и положение decimal separator...
Позволяет ввод только цифр, BackSpace, Decimal Separator... Код:
// функция фильтрации ввода function FiltrInputFigures(Edit: TEdit; Key: Char): Char; var vr_Pos, vrPos, vrLength, vrSelStart: byte; const I: byte = 1; begin with Edit do begin vrLength := Length(Text); // определяем длину текста vrPos := Pos(',', Text); // проверяем наличие запятой vr_Pos := Pos('.', Text); // проверяем наличие запятой vrSelStart := SelStart; // определяем положение курсора end; Result := Key; Case Key of '0' .. '9': // если нажата цифра begin if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then Result := #0; // "погасить" клавишу end; ',', '.': // если нажата точка или запятая begin if (vr_Pos > 0) or (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then Result := #0 // "погасить" клавишу else Result := DecimalSeparator; // всегда заменять точку на запятую end; #8: ; // позволить удаление знаков клавишей 'Back Space' else Result { Key } := #0; // "погасить" все остальные клавиши end; end; //**************************************************** // Получение информации о системном разделителе дробной части function GetLocaleInformation(Flag: Integer): string; var pcLCA: array [0 .. 20] of Char; begin if GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, Flag, pcLCA, 19) <= 0 then pcLCA[0] := #0; Result := pcLCA; end; В начале был Бит, потом Байт и только потом появилось Слово... |