Главная страница
    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.067 c
2-1332430983
теркин
2012-03-22 19:43
2013.03.22
Представление двухмерного массива в виде динамического списка


2-1340649651
Pcrepair
2012-06-25 22:40
2013.03.22
Проблема с вводом-выводом данных через параметры процедуры


15-1343939402
Юрий
2012-08-03 00:30
2013.03.22
С днем рождения ! 3 августа 2012 пятница


15-1340596830
ArchValentin
2012-06-25 08:00
2013.03.22
Обучение


15-1334662086
xayam
2012-04-17 15:28
2013.03.22
Преобразование RGB в оттенки серого (схема)





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