Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Маска ввода в 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

Или ты о чем ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо