Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
ВнизМаска ввода в StringGrid с помощью KeyPress Найти похожие ветки
← →
Gurd (2008-09-26 11:49) [0]Здравствуйте, подскажите решение...
Для контроля ввода в ячейку StringGrid вещественных чисел использую процедуру KeyPress, данный алгоритм был написан (не мной) для компонента Edit в котором есть свойство SelStart, а в grid нет (я не нашел) такого свойства, в результате чего разделитель (DecimalSeparator) можно поставить, если вводить первым не в пустую чейку, т.к не проводиться проверка выделенного текста. Если есть идеи, буду признателен. Спасибо
procedure TForm1.KeyPress(Sender: TObject; var Key: Char);
var //цифровая маска
vrPos, vrLength, vrSelStart: byte;
const
I: byte = 3;
//I+3 = количество знаков после запятой (в данном случае - 4 знака)
begin
with Sender as TStringGrid do
begin
vrLength := Length(Cells [col,row]); //определяем длину текста
vrPos := Pos(",", Cells [col,row]); //проверяем наличие запятой
end;
case Key of
"0".."9":
begin
//проверяем положение курсора и количество знаков после запятой
if (vrPos > 0) and (vrLength - vrPos > I) then
Key := #0; //"погасить" клавишу
end;
",", ".":
begin
//если запятая уже есть или запятую пытаются поставить перед
//числом или никаких цифр в поле ввода еще нет
if (vrPos > 0) or (vrLength = 0) or (vrSelStart=0) then !!!!!!!!!!
Key := #0 //"погасить" клавишу
else
Key :=DecimalSeparator;
//Key := #44; //всегда заменять точку на запятую
end;
#8: ; //позволить удаление знаков клавишей "Back Space"
#13: //позволить "Enter"
else
Key := #0; //"погасить" все остальные клавиши
end;
end;
← →
Сергей М. © (2008-09-26 12:00) [1]
> разделитель (DecimalSeparator) можно поставить, если вводить
> первым не в пустую чейку
А что в этом плохого ?
Значение .123 вполне можно трактовать как 0.123
Или ты о чем ?
← →
Gurd (2008-09-26 12:48) [2]может получиться значение "," просто один разделитель, что не допустимо (в моем случае). И в данном алгоритме (для edit) предусматривается проверка на ввод разделителя до цифры, и мне надо реализовать такое для grid (в этом все проблема)
← →
Сергей М. © (2008-09-26 12:54) [3]
> может получиться значение "," просто один разделитель
А для этого существует событие OnSetEditText, в обработчике которого ты волен обнаружеть ткую ситуацию и скорректировать ее требуемым образом
← →
Gurd (2008-09-26 13:12) [4]Ок, спасибо, буду пробывать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c