Содержание материала

Посылаю Вам несколько расширенный вариант числовой маски компонента TЕdit c помощью OnKeyPress. В отличие от имеющегося в "Советах", приведенный код не "запирает" поле ввода при заполнении десятичной части, преобразует точку в запятую (для удобства пользователя), не позволяет поставить десятичную запятую перед числом и позволяет стирать знаки в поле ввода клавишей 'Back Space'. Код проверен в Delphi 5.

  

Code:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

var //цифровая маска

vrPos, vrLength, vrSelStart: byte;

const

I: byte = 1;

   //I+1 = количество знаков после запятой (в данном случае - 2 знака)

begin

 

with Sender as TEdit do

begin

   vrLength := Length(Text); //определяем длину текста

   vrPos := Pos(',', Text); //проверяем наличие запятой

   vrSelStart := SelStart; //определяем положение курсора

end;

 

case Key of

 

   '0'..'9':

     begin

       //проверяем положение курсора и количество знаков после запятой

       if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then

         Key := #0; //"погасить" клавишу

     end;

   ',', '.':

     begin

       //если запятая уже есть или запятую пытаются поставить перед

       //числом или никаких цифр в поле ввода еще нет

       if (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then

         Key := #0 //"погасить" клавишу

       else

         Key := #44; //всегда заменять точку на запятую

     end;

   #8: ; //позволить удаление знаков клавишей 'Back Space'

else

   Key := #0; //"погасить" все остальные клавиши

end;

end;

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить