![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть вот такой обработчик событий:
Цитата:
Смысл в том, что я поместил несколько TEdit на форму, в которые нужно вводить только числа, можно дробные. Для экономии кода я один обработчик привязал к ним всем. Буквы, закарючки и прочее не вводится. Работают только цифры, BackSpace и точка или запятая (ставится DecimalSeparator). Но, при этом, этих DecimalSeparator'ов может поставится несколько и он может стоять в начале. Как можно этого избежать, что бы числа вводились корректно? |
|
#2
|
|||
|
|||
|
Один из самых простых способов,
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
N:Integer;
begin
with (Sender as TEdit) do
if TryStrToInt(Text,N) then Tag:=N
else Text:=IntToStr(Tag);
end;то восстанавливает предыдущее значение из Tag-а компонента в Text. |
|
#3
|
|||
|
|||
|
большое спасибо
with (Sender as TEdit) do вот эта строчка очень порадовала... давно была необходимость в чём-то аналогичном. Благодарю |
|
#4
|
||||
|
||||
|
Функция фильтрует все символы кроме цифр, точки, запятой, BackSpace,
при этом заменяет точку на запятую (в данном примере), не ставит точку первой и ограничивает количество символв после запятой... Код:
// Функция фильтрации ввода
function FilterInputFigures(Edit: TEdit; Key: Char): Char;
const
I: byte = 1;//число символов после запятой
var
vr_Pos, vrPos, vrLength, vrSelStart: byte;
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
//если есть точка или запятая или курсор в начале или длина текста 0
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;Последний раз редактировалось NIch, 25.02.2010 в 09:25. |
|
#5
|
|||
|
|||
|
о_О пасибо.... не думал, что так просто всё оказывается))
|