![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Маска ввода в StringGrid с помощью KeyPress [D6, WinXP]
Gurd © (2008-09-26 11:49:00)Здравствуйте, подскажите решение...
Для контроля ввода в ячейку 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;
Gurd (2008-09-26 13:12:00) [1]Ок, спасибо, буду пробывать.
Сергей М. (2008-09-26 12:54:00) [2]
> может получиться значение ',' просто один разделитель
А для этого существует событие OnSetEditText, в обработчике которого ты волен обнаружеть ткую ситуацию и скорректировать ее требуемым образом
Gurd (2008-09-26 12:48:00) [3]может получиться значение ',' просто один разделитель, что не допустимо (в моем случае). И в данном алгоритме (для edit) предусматривается проверка на ввод разделителя до цифры, и мне надо реализовать такое для grid (в этом все проблема)
Сергей М. (2008-09-26 12:00:00) [4]
> разделитель (DecimalSeparator) можно поставить, если вводить
> первым не в пустую чейку
А что в этом плохого ?
Значение .123 вполне можно трактовать как 0.123
Или ты о чем ?