Вниз
Скачать: CL | DM;

Логика сравнения   Найти похожие ветки 

← →
Дмитрий   (2012-07-29 15:06) [0]

Привет.
Есть компонент StringGrid1.
Нужно сделать так, чтобы в каждой ячейку можно было вводить только одну запятую и не первым элементов в строке.
Есть такой вот код, он работает, но я его скопировал, а сам не понимаю, как он работает, объяснить пожалуйста,если сможете.

case Key of
 "." , ",":   //если клавиша соответсвует точке или запятой
 begin
  if Key<>DecimalSeparator //если клавиша не равняется десятичному разделителю
  then Key:=DecimalSeparator; //то клавиша ровняется десятичному разделителю     ДО ЭТОГО МОМЕНТА ВСЁ ПОНЯТНО
  if Pos(DecimalSeparator,            
  StringGrid1.Cells[StringGrid1.Col,0]
     )<>0          //если позиция десятичного разделителя в строке StringGrid не равна нулю
  then Key:=Char(0); //то символ не пишем
 end;


← →
Cobalt ©   (2012-07-29 15:11) [1]

Перечитай еще раз комментарии к коду и подумай, какова должна быть позиция разделителя, если в строке символы нумеруются с 1


← →
Дмитрий   (2012-07-29 15:17) [2]

Ааа.
Возможно код читается так.
Если десятичный разделитель есть уже в строке, то символ этот не пишем.


← →
Германн ©   (2012-07-29 15:45) [3]

Некрасивый код. Да и задаче не соответствует полностью. Да и задача в целом не понятна. :)


← →
Михаил   (2012-07-30 09:35) [4]

Работает очень просто:
Скорее всего этот код пишется в обработчике OnKeyPress. Key - нажатая клавиша
1. Проверяется нажали запятую или точку.
2. Если да, пункт 3, иначе выход
3. Нажатый символ приводится к разделителю в системе. Т.е. не важно что вы нажали точку или запятую, напечатается разделитель используемый для дробных чисел
4. Проверяется существует ли в строке разделитель. И если существует, т.е. его позиция не равна нулю, то дается команда не писать его снова.

В этом алгоритме есть прокол, который не решает вашу задачу. Вы написали, чтобы разделитель нельзя было написать первым в строке. Этот алгоритм не обеспечивает этого. Он обеспечивает только единичный ввод разделителя, но ему абсолютно безразлично на какой позиции он будет стоять


← →
Михаил   (2012-07-30 09:37) [5]

И еще один прокол, что он не в каждой ячейке проверяет, а только в нулевой строке. Т.е. во второй строке и следующих тоже не будет работать уже



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.062 c
15-1328942551
AV
2012-02-11 10:42
2013.03.22
Нужен ли XP mode, если на семерку хочу виртуалку поставить?


15-1338150603
Юрий
2012-05-28 00:30
2013.03.22
С днем рождения ! 28 мая 2012 понедельник


15-1347565047
Artem
2012-09-13 23:37
2013.03.22
Сегодня выбрал тему дипломный работы.


15-1338377064
Handle
2012-05-30 15:24
2013.03.22
проектирование БД интернет-магазина


15-1345146034
AntiUser
2012-08-16 23:40
2013.03.22
Есть знатоки SVG?




   Наверх