Всем приветы! У меня следующая ситуация, есть 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];
Вот я уже продвинулся, но ещё что - то не так, возможно вы заметите, что именно :
procedure TExecute.SDAS(Sender: TObject; ACol, ARow: Integer; const Value: String); begin case execute.StringGrid2.Col of 0..1 : case (amount) of 1..9 : If ( Length(Value) = 1 ) then StringGrid2.Cells[ACol, ARow] := Value[1]; 10..15 : If ( Length(Value) >= 2 ) then begin If ( ( StrToInt (value[1]) = 1 ) and ( ( StrToInt(Value[2] ) ) <= ( amount mod 10 ) ) ) Then StringGrid2.Cells[ACol, ARow] := Value[2] Else StringGrid2.Cells[ACol, ARow] := Value[1];
end;
end;
end; end;
procedure TExecute.FormKeyPress(Sender: TObject; var Key: Char); //Correct begin case execute.StringGrid2.Col of 0..1 : case (amount) of 1..9 : If Not ( Key In ['0'.. chr(ord('0') + amount) ] ) then Key := #0; 10..15 : If Not ( Key In ['0'.. '9'] ) then Key := #0; end; end; end;