Главная страница
    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.45 MB
Время: 0.128 c
2-1335171988
andrewtitoff
2012-04-23 13:06
2013.03.22
IdHTTP и Proxy


15-1341261002
Юрий
2012-07-03 00:30
2013.03.22
С днем рождения ! 3 июля 2012 вторник


1-1300884510
Ольга
2011-03-23 15:48
2013.03.22
Определить путь к DLL из EXE


2-1347783911
alfa
2012-09-16 12:25
2013.03.22
Требуется разъяснение команды AS


15-1352290006
harisma
2012-11-07 16:06
2013.03.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский