Всем приветы! У меня следующая ситуация, есть 3 столбика (но работа происходит с 2мя первыми) и сколько - то строк в компоненте stringgrid. В главной программе есть параметр, от которого зависит какие значения можно вводить в ячейки стрингрида. Допустим, этот параметр amount. Итак, возможны 2 ветки : 1) 0 < amount <= 9 - значит в ячейку стрингрида можно вводить только цифры от 1 до 9. 2) 10<=amount <=15 - значит в ячейку можно вводить как цифры от 1 до 9, так и числа от 10 до 15. На OnKeyPress я отлавливаю введённые пользователем цифры. А на OnSetEditText я пытаюсь выполнить большую часть описанного, но неособо выходит : вот этой процедурой обрабатывается событие OnSetEditText
procedure TExecute.SDAS(Sender: TObject; ACol, ARow: Integer; const Value: String); begin case execute.StringGrid2.Col of //работаем с 2мя первыми столбиками 0..1 : case (amount) of 1..9 : If ( Length(Value) > 1 ) then StringGrid2.Cells[ACol, ARow] := Value[1]; \\1 ветка 10..15 : If ( Length(Value) > 2 ) then \\2 ветка begin if StrToInt (Value[1]) = 1 then if value[2] In ['1','2','3','4','5'] then StringGrid2.Cells[ACol, ARow] := Value[1] + Value[2] else StringGrid2.Cells[ACol, ARow] := Value[1];
Допустим в одну из ячеек мы ввели значение, а потом переключаемся на другую ячейку и выдаётся ошибка '' is not a valid integer value
Если не менять ничего кроме того обработчика, который я показал - такого в принципе не может быть, любая попытка ввести нечисловое значение карается исключением, которое выбрасывает StrToInt, следовательно флаг Error будет установлен в True, и некорректное значение будет просто сброшено (вместо него пишется пустая строка).
Если же были какие-то другие махинации с StringGrid-ом - то может быть все, что угодно... Это надо смотреть программу полностью.