Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ограничение ввода в стринггрид действительных чисел [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо