Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
ВнизОграничение ввода в стринггрид действительных чисел Найти похожие ветки
← →
Oleg_teacher (2011-02-10 13:10) [0]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;
Все прекрасно работает, проблема только со знаком минус в начале строки... при начальном вводе все прекрасно, если ячейка пустая значит минус могу вводить... Но вот если я ввел, а потом ее редактирую (думаю добавить минус в начало) естественно получаю проблемы ввода "-"..
Как ету проблему решить?
← →
RWolf © (2011-02-10 13:17) [1]предлагаю обрабатывать OnSetEditText.
← →
Oleg_teacher (2011-02-10 13:21) [2]OnSetEditText не видно какой именно символ в даный момент ввожу..
← →
RWolf © (2011-02-10 13:26) [3]
> Oleg_teacher (10.02.11 13:21) [2]
а нужно ли?
смотрим текст; если некорректный — возвращаем предыдущий сохранённый.
← →
oldman © (2011-02-10 13:28) [4]
> or ((Key = "-") and (length(StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row])<>0))
> запрет на минус не вначале цифры
Нет, это запрет как раз на "минус надо вводить первым"
← →
Oleg_teacher (2011-02-10 13:34) [5]
> Нет, это запрет как раз на "минус надо вводить первым"
правильней вы сказали... если и вводить знак минуса, то только когда ячейка пуста.
← →
Oleg_teacher (2011-02-10 13:35) [6]
> смотрим текст; если некорректный — возвращаем предыдущий
> сохранённый.
ну впринцыпе да, как вариант
← →
oldman © (2011-02-10 13:37) [7]А можешь сделать так:
если нажат минус и ячейка не пуста
- сохранить содержимое ячейки
- очистить ячейку
- вставить минус
- вставить сохраненное содержимое
:)))
изврат, конечно, но для нажатия минуса не обязательно отправляться в начало
← →
Anatoly Podgoretsky © (2011-02-10 13:47) [8]
> or ((Key = "-") and (POS ("-", StringGrid1.Cells[StringGrid1.
> Col,StringGrid1.Row]) > 0)) // запрет на второй минус
Сам же приказал
← →
Рамиль © (2011-02-10 15:42) [9]А, например,
-1.23e-4
как будем вводить?
Проверяй TryStrToFloat (приписав 0, если строка заканчивается на "-" или "." , хотя может и так прокатит, не помню точно как работает функция)
Если ложь, возвращай предыдущее значение и ставь курсор на прежнее место.
И рассмотри момент ухода с ячейки с недописанным числом.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c