Советы по Delphi

         

Числовая маска компонента Edit c помощью OnKeyPress I


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
VAR P, L : Byte;
begin
WITH
Sender AS TEdit DOBEGINL := Length(Text);P := Pos('.', Text);END;CASE Key OF'0'..'9' : IF (P>0) AND (L-P>1) THEN Key := #0;'.' : IF P > 0 THEN Key := #0;#8 : {пробел};ELSE Key := #0;END;end;

Команда Key=#0 в обработчике события OnKeyPress "гасит" нажатую клавишу. Так, если нажата цифровая клавиша, то код ее "гасится", ЕСЛИ уже присутствует десятичная точка и две цифры после нее. Если введена десятичная точка, то она "гасится", ЕСЛИ десятичная точка уже присутствует. Пробел пропускается в любом случае, коды остальных клавиш всегда "гасятся". Во всяком случае теперь вы знаете "куда копать".

- Neil [000550]


Читатель советует:

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

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 dobeginvrLength:=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;

С уважением, . [000903]



Содержание раздела