![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В TEdit - одни цифры и ОДНА запятая? [D7, WinXP]
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);
нельзя?