![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#10
|
||||
|
||||
![]() Вообщем с TCustomEditMask у меня как-то не срослось и поэтому я решил плясать от TMemo + меня вчера перед сном осенила одна мысль и вот я добрался до Делфи и сделал
![]() Код:
procedure TForm1.mmo1KeyPress(Sender: TObject; var Key: Char); Var a:integer; begin if mmo1.Text='.' then key:=#0; if mmo1.Text=' ' then key:=#0; if key in['0'..'9','.','+','-',#8] then begin if key='.' then begin For a:=1 to Length(mmo1.Text) do begin if mmo1.Text[a]='.' then key:=#0; end; end; end else key:=#0; if Length(mmo1.Text) <= 8 then begin if pos('.',mmo1.text) <> 0 then begin if pos('.',mmo1.text) = 8 then mmo1.MaxLength:= 11 else if pos('.',mmo1.text) < 8 then mmo1.MaxLength := Pos('.',mmo1.text) + 3; end else if Length(mmo1.Text) = 7 then begin if key='.' then key:=#0; mmo1.Text:=mmo1.text+'.'; mmo1.SelStart:=8; end; end; end; Вообщем сначала тут идут проверки чтобы пользователь не смог начать с пробела или точки, потом чтобы мог вводить только цифры,плюс и минус (забыл вчера упомянуть про это) и чтобы пользователь смог ввести только одну точку. Как работает ограничитель? А там все гениально и просто. Так как в моем случае максимальное кол-во символов до точки равно 8 (например +123456) и точка идет 8, то я просто проверяю при вводе сколько уже пользователь ввел символов и если их меньше 8, то проверяю есть ли точка и если есть то на какой позиции находится (спасибо lmikle за идею) и если она стоит на 8 позиции(максимально возможной) то я просто устанавливаю максимальное допустимое кол-во символов в memo (mmo1.MaxLength) на 11 (значит что пользователь сможет ввести еще только три символа после точки), если она на какой-то другой позиции (например если число "1234.", тут у нас пятая позиция), то я просто устанавливаю максимальное допустимое кол-во символов в memo(mmo1.MaxLength) на это число (в нашем случае пять) плюс три. А вот если пользователь ввел 7 символов без точки, то точка автоматом добавляется при следующем вводе символа (если пользователь сам нажимает на точку то нажатие не засчитывается, но точка все равно добавится только уже программой). Всем еще раз большое спасибо за помощь! P.S. Ушел изучать дальше MaskEdit =) Последний раз редактировалось Ranmabaka, 05.12.2011 в 18:14. |