Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.22;
Скачать: CL | DM;

Вниз

Ограничение ввода в стринггрид действительных чисел   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1297426351
cross
2011-02-11 15:12
2011.05.22
процедура с параметром или функция


6-1237262725
alshtam
2009-03-17 07:05
2011.05.22
вопрос по Indy


15-1297253986
Доменик
2011-02-09 15:19
2011.05.22
Web разработка


2-1297406686
ВашеИмя
2011-02-11 09:44
2011.05.22
Взаимодействие форм


2-1297437513
novai
2011-02-11 18:18
2011.05.22
как правильно описать функцию с разными выходами?