![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ограничение ввода в стринггрид действительных чисел [D7]
Oleg_teacher © (2011-02-10 13:10:00)procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = ',' then
Key := DecimalSeparator; // запятую заменяем на разделитель для числа
if Key = '.' then
Key := DecimalSeparator; // точку заменяем на сепаратор (на всякий случай)
if not (Key in ['0'..'9','-',DecimalSeparator,#8,#13]) // символы которые пропускаются
or ((Key = DecimalSeparator) // все цифры знак минус разделитель
and (POS (DecimalSeparator, StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]) > 0)) // запрет на второй сепаратор
or ((Key = '-') and (POS ('-', StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]) > 0)) // запрет на второй минус
or ((Key = '-') and (length(StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row])<>0)) // запрет на минус не вначале цифры
then // (можно и предыдущей строчки но так лучше для понимания)
begin
Key := #0; // запрещенный символ заменяем нулем
MessageBeep (MB_OK); //
end;
Caption:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
end;
Все прекрасно работает, проблема только со знаком минус в начале строки... при начальном вводе все прекрасно, если ячейка пустая значит минус могу вводить... Но вот если я ввел, а потом ее редактирую (думаю добавить минус в начало) естественно получаю проблемы ввода "-"..
Как ету проблему решить?
Рамиль (2011-02-10 15:42:00) [1]А, например,
-1.23e-4
как будем вводить?
Проверяй TryStrToFloat (приписав 0, если строка заканчивается на "-" или "." , хотя может и так прокатит, не помню точно как работает функция)
Если ложь, возвращай предыдущее значение и ставь курсор на прежнее место.
И рассмотри момент ухода с ячейки с недописанным числом.
Anatoly Podgoretsky (2011-02-10 13:47:00) [2]
> or ((Key = '-') and (POS ('-', StringGrid1.Cells[StringGrid1.
> Col,StringGrid1.Row]) > 0)) // запрет на второй минус
Сам же приказал
oldman (2011-02-10 13:37:00) [3]А можешь сделать так:
если нажат минус и ячейка не пуста
- сохранить содержимое ячейки
- очистить ячейку
- вставить минус
- вставить сохраненное содержимое
:)))
изврат, конечно, но для нажатия минуса не обязательно отправляться в начало
Oleg_teacher (2011-02-10 13:35:00) [4]
> смотрим текст; если некорректный — возвращаем предыдущий
> сохранённый.
ну впринцыпе да, как вариант
Oleg_teacher (2011-02-10 13:34:00) [5]
> Нет, это запрет как раз на "минус надо вводить первым"
правильней вы сказали... если и вводить знак минуса, то только когда ячейка пуста.
oldman (2011-02-10 13:28:00) [6]
> or ((Key = '-') and (length(StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row])<>0))
> запрет на минус не вначале цифры
Нет, это запрет как раз на "минус надо вводить первым"
RWolf (2011-02-10 13:26:00) [7]
> Oleg_teacher (10.02.11 13:21) [2]
а нужно ли?
смотрим текст; если некорректный — возвращаем предыдущий сохранённый.
Oleg_teacher (2011-02-10 13:21:00) [8]OnSetEditText не видно какой именно символ в даный момент ввожу..
RWolf (2011-02-10 13:17:00) [9]предлагаю обрабатывать OnSetEditText.