Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1296849834
Baks
2011-02-04 23:03
2011.05.22
Variants unit в Delphi 5


2-1297771744
well
2011-02-15 15:09
2011.05.22
TTreeView как выделить несколько узлов?


15-1296941377
Юрий
2011-02-06 00:29
2011.05.22
С днем рождения ! 6 февраля 2011 воскресенье


2-1297852832
thandle2
2011-02-16 13:40
2011.05.22
exceptions


15-1297153035
И. Павел
2011-02-08 11:17
2011.05.22
Отправка писем на русском языке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский