Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: 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 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.081 c
2-1328461488
Xmen
2012-02-05 21:04
2013.03.22
архивация открытого документа


2-1337537332
petvv
2012-05-20 22:08
2013.03.22
HEX в DateTime


15-1344504943
brother
2012-08-09 13:35
2013.03.22
верстка div ом


3-1276592527
Виталий Панасенко
2010-06-15 13:02
2013.03.22
Delphi+ODBC Visual Foxpro driver


15-1334583721
Андреевич
2012-04-16 17:42
2013.03.22
Узнать когда был выход из ждущего режима