![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Логика сравнения [D7, XP]
Дмитрий © (2012-07-29 15:06:00)Привет.
Есть компонент 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;
Михаил (2012-07-30 09:37:00) [1]И еще один прокол, что он не в каждой ячейке проверяет, а только в нулевой строке. Т.е. во второй строке и следующих тоже не будет работать уже
Михаил (2012-07-30 09:35:00) [2]Работает очень просто:
Скорее всего этот код пишется в обработчике OnKeyPress. Key - нажатая клавиша
1. Проверяется нажали запятую или точку.
2. Если да, пункт 3, иначе выход
3. Нажатый символ приводится к разделителю в системе. Т.е. не важно что вы нажали точку или запятую, напечатается разделитель используемый для дробных чисел
4. Проверяется существует ли в строке разделитель. И если существует, т.е. его позиция не равна нулю, то дается команда не писать его снова.
В этом алгоритме есть прокол, который не решает вашу задачу. Вы написали, чтобы разделитель нельзя было написать первым в строке. Этот алгоритм не обеспечивает этого. Он обеспечивает только единичный ввод разделителя, но ему абсолютно безразлично на какой позиции он будет стоять
Германн (2012-07-29 15:45:00) [3]Некрасивый код. Да и задаче не соответствует полностью. Да и задача в целом не понятна. :)
Дмитрий (2012-07-29 15:17:00) [4]Ааа.
Возможно код читается так.
Если десятичный разделитель есть уже в строке, то символ этот не пишем.
Cobalt (2012-07-29 15:11:00) [5]Перечитай еще раз комментарии к коду и подумай, какова должна быть позиция разделителя, если в строке символы нумеруются с 1