Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В TEdit - одни цифры и ОДНА запятая? [D7, WinXP]


Страницы:   1 2 3

tolstiak ©   (2005-01-17 16:09:00) 

Доброго всем, уважаемые!
С первой частью вопроса я справился :)), т.е. в TEdit одни цифры получаються..... но мне необходимо что бы (как в стандартном калькуляторе) блокировалось повторное нажатие "." или ","... как это сделать?


tolstiak   (2005-01-18 15:36:00) [21]

Вы уж извените, порой за глупые вопросы просто я всего неделю, как пишу на Дельфи... :)


tolstiak   (2005-01-18 15:34:00) [22]

>KADAN ©
>SergP ©
в [20] вполне рабочий код (и только цифры вводятся и одна ",")... только проблема в том что при удалении этой одной "," больше запятая не вводится.


SergP   (2005-01-18 15:00:00) [23]

Можно при вводе каждого символа проверять все это через StrToCurr,
если єксепшена не возникло, значит такой символ вводить можно, иначе запрещать его вводить...


KADAN   (2005-01-18 15:00:00) [24]

Предлагаю такое решение (сам пользовал не раз, получается красиво). Вобщем, после ввода числа в Edit1 пользователь должен нажать кнопку Button1. Не надо давать ему нажимать кнопку, пока не введет правильно.

procedure TForm1.Edit1Change(Sender: TObject);
var a:double;
   code:integer;
begin
 Val(Edit1.Text,a,code);
 button1.Enabled:=code=0;
end;


Как плюс, можно как-то ненавязчиво информировать пользователя о неправильном вводе. Например в строке статуса или в каком-нить лейбле.


TUser   (2005-01-18 14:56:00) [25]


> tolstiak   (18.01.05 13:55) [18]

Там уже и точка, и запятая есть. Зачем еще DecimalSeparator в множестве?


tolstiak   (2005-01-18 14:52:00) [26]

>REP ©
у меня даже на Д7, а Delphi 8.0 for the Microsoft .NET Framework
вполне возможно что другая версия... хотя хз...
вот что примерно получилось
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case i of
0: begin
       if not (Key in ['0'..'9',#8,',']) then
         begin
         if Key='.' then
                         begin
                           Key:=',';
                           i:=1;
                         end
           else Key:=#0;
         end;
   end;
1: begin
       if not (Key in ['0'..'9',#8]) then Key:=#0;
   end;
end;
end;

только теперь нужно сделать так что бы если я удаляю эту единственную "," то i:=0


REP   (2005-01-18 14:04:00) [27]

Ну не знаю, у меня Д5
FormKeyPress(Sender: TObject; var Key: Char)

Может в этом дело. семерку в глаза не видел


tolstiak   (2005-01-18 13:55:00) [28]

>REP ©
If (Key>=#32) and (Not (Key in ['0'..'9',',','.',DECIMALSEPARATOR])) Then
   Key:=#0.... и т.д.

дает ошибку:"Incompatible types: 'Char' and 'string'
:((


REP   (2005-01-18 13:36:00) [29]

If (Key>=#32) and (Not (Key in ['0'..'9',',','.',DECIMALSEPARATOR])) Then
    Key:=#0
 Else
    If (Key=',') or (Key='.') Then
      If Pos(DECIMALSEPARATOR,(Sender As TEdit).Text)=0 Then
        Key:=DECIMALSEPARATOR
      else
        Key:=#0;


Reindeer Moss Eater   (2005-01-18 12:15:00) [30]

по идее такого не могЁт быть потому что должно быть так: "1000000" - это миллион, а "," - только разделитель целой и дробной части числа.

Все было бы так просто, если бы у всех были одни и те же идеи.
"1000000" - это безусловно миллион
но "1 000,000.00" - это тоже миллион.


tolstiak   (2005-01-18 12:13:00) [31]

>Anatoly Podgoretsky ©
Дык моя задача не дать юзарю не правильно осуществить ввод числа... в этом то и дело...


Anatoly Podgoretsky   (2005-01-17 17:53:00) [32]

POS
Тольк зачем пользователю мешать вводить? Пусть вводит как хочет, а вот когда кончит вводить тогда и проверить на правильность.


tolstiak   (2005-01-17 17:49:00) [33]

>Ega23 ©
кстати может я чего не понимаю ("чайник" ешо) но вот это:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8,DecimalSeparator]) then  Key:=#0;
end;

дает ошибку:"Incompatible types: 'Char' and 'string'
:((


tolstiak   (2005-01-17 17:42:00) [34]

>Developerr
а где его взять?


Developerr   (2005-01-17 17:39:00) [35]

Используй RxCalcEdit и будет тебе счастье, да и голову морочить не нужно с написанием кода.


tolstiak   (2005-01-17 17:33:00) [36]

>Ega23 ©
неее тут фсе правильно... нажатие "." заменяет на нажатие ","... это нужно...

>Reindeer Moss Eater ©
"Например "1,000,000" - это что? Неправильно введенная единица или правильно введенный миллион с разделителем тысяч?"
по идее такого не могЁт быть потому что должно быть так: "1000000" - это миллион, а "," - только разделитель целой и дробной части числа.


Ega23   (2005-01-17 16:49:00) [37]

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8,',']) then
  begin
  if Key='.' then Key:=','else Key:=#0;
  end;
end;


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8, DecimalSeparator]) then  Key:=#0;
end;


Reindeer Moss Eater   (2005-01-17 16:46:00) [38]

блокировалось повторное нажатие "." или ","... как это сделать?

Сделать это легко.
Но ты сначала попробуй догадаться что там вводит юзер.

Например "1,000,000" - это что? Неправильно введенная единица или правильно введенный миллион с разделителем тысяч?


tolstiak   (2005-01-17 16:43:00) [39]

вот что с этим можно сделать что бы блокировалось повторное нажатие "." или ",":
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8,',']) then
   begin
   if Key='.' then Key:=','else Key:=#0;
   end;
end;


tolstiak   (2005-01-17 16:34:00) [40]

> Ega23 ©
> TUser ©
А через
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
нельзя?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо