- 0
Ввод числа - самый простой способ фильтрации
-
Похожий контент
-
- 12 ответов
- 1 259 просмотров
-
- 2 ответа
- 679 просмотров
-
- 0 ответов
- 926 просмотров
-
- 9 ответов
- 2 173 просмотра
-
- 1 ответ
- 1 251 просмотр
-
- 6 ответов
- 1 675 просмотров
-
- 2 ответа
- 1 207 просмотров
-
- 0 ответов
- 1 013 просмотра
-
Поставил Delphi 10.4 - не могу скомпилировать приложение под Android
От Delpher-X,
- delphi 10.4.2
- android
- (и ещё 2 )
- 24 ответа
- 4 252 просмотра
-
- 4 ответа
- 1 633 просмотра
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Евгений Корепов
Намучавшись с не работающим FilterChar и кучей способов ввода по маске, сделал свой способ. По моему мнению самый простой.
Код позволяет вводить только числа, включая дробные и отрицательные.
procedure TFormMain.Edit1ChangeTracking(Sender: TObject); Var FEdit : TEdit; FFloat : Single; begin If Not (Sender is TEdit) Then // Защитимся от не выспавшегося самого себя Exit; FEdit:=(Sender as TEdit); // Для удобства... FEdit.Text:=FEdit.Text.Replace(' ',''); // Убираем случайные пробелы if FEdit.Text.IsEmpty then // Если пусто (ничего не введено или все удалено), ничего не делаем Exit; FEdit.Text:=FEdit.Text.Replace('.',','); // Заменяйм точку запятой if FEdit.Text.Equals(',') then // Если введен разделитель, добавляем перед ним ноль для красоты (не обязательно) begin FEdit.Text:='0,'; FEdit.CaretPosition:=FEdit.CaretPosition+1; // без этого курсор останется между нулём и запятой end; if FEdit.Text.Equals('-') then // Если введен только минус, не пытамся его драконить Exit; if TryStrToFloat(FEdit.Text,FFloat) Then // Пробуем преобразовать в число FEdit.TagString:=FEdit.Text // Если удалось, сохраняем в временном хранилище Else FEdit.Text:=FEdit.TagString; // Если не удалось, восстанавливаем из временного хранилища end;В качестве временного хранилища использовано TagString, дабы не разводить глобальных переменных.
Возможно понадобиться очистка временного хранилища при многократном использовании:
procedure TFormMain.Edit1Enter(Sender: TObject); begin If Not (Sender is TEdit) Then Exit; (Sender as TEdit).TagString:=''; end;Буду рад услышать замечания и предложения.
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.