Посылаю Вам несколько расширенный вариант числовой маски компонента 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; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!