Форум: "Начинающим";
Текущий архив: 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