|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
о_О пасибо.... не думал, что так просто всё оказывается))
|