Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #10  
Старый 05.12.2011, 17:49
Аватар для Ranmabaka
Ranmabaka Ranmabaka вне форума
Прохожий
 
Регистрация: 04.12.2011
Сообщения: 5
Репутация: 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.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025