![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Мне нужно сделать, чтобы при вводе данных в 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
|
||||
|
||||
|
У меня такой вопрос - а отрицательные числа какбэ кто обрабатывать будет? И проверка, что пользователь не введёт "многоточие"?
|
|
#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; |