Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
Дмитрий   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.074 c
15-1345928148
Дмитрий С
2012-08-26 00:55
2013.03.22
Умер Нил Армстронг – первый человек, побывавший на Луне


2-1329295758
toropoff
2012-02-15 12:49
2013.03.22
Antialiasing


15-1352269270
Chorus
2012-11-07 10:21
2013.03.22
Вычисление высот в произвольном треугольнике


15-1329157948
StudentGuse
2012-02-13 22:32
2013.03.22
Скрытая авторизация в контакте?


15-1343205350
Eu
2012-07-25 12:35
2013.03.22
До какого числа Double точно хранит целые?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский