Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.01;
Скачать: CL | DM;

Вниз

Маска ввода в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1251986227
Б
2009-09-03 17:57
2009.11.01
Как включить компьютер через определённо установленное время?


15-1251846861
TIF
2009-09-02 03:14
2009.11.01
Главный сайт страны обновился


15-1251923407
Юрий
2009-09-03 00:30
2009.11.01
С днем рождения ! 3 сентября 2009 четверг


15-1250971948
KilkennyCat
2009-08-23 00:12
2009.11.01
Провал ЕГЭ


2-1252477927
AlexDan
2009-09-09 10:32
2009.11.01
bat файл, создание и работа