Главная страница
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.47 MB
Время: 0.016 c
2-1252447989
TyoshA
2009-09-09 02:13
2009.11.01
Послать нажатие книпки неактивному окну


2-1253019089
Achpile
2009-09-15 16:51
2009.11.01
Диалоги


11-1196694648
MTsv DN
2007-12-03 18:10
2009.11.01
Горизонтальная прокрутка у TreeView...


2-1252648119
Гость
2009-09-11 09:48
2009.11.01
Объявление переменной


15-1252038948
Ruzzz
2009-09-04 08:35
2009.11.01
Turbo Delphi не установить в Win7