Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизВ TEdit - одни цифры и ОДНА запятая? Найти похожие ветки
← →
tolstiak (2005-01-17 16:09) [0]Доброго всем, уважаемые!
С первой частью вопроса я справился :)), т.е. в TEdit одни цифры получаються..... но мне необходимо что бы (как в стандартном калькуляторе) блокировалось повторное нажатие "." или ","... как это сделать?
← →
TUser © (2005-01-17 16:13) [1]var Edit1Text: string;
procedure FormCreate();
begin
Edit1Text:=Edit1.Text;
end;
procedure Edit1Change();
var i: integer;
r: boolean;
f: boolean;
begin
i:=1; r:=true; f:=false;
while r and (i <= length(Edit1.Text)) do
if Edit1.Text[i] in ["0".."9"] then
inc (i)
else
if Edit1.Text[i] in [".",","] and not f then begin
inc (i); f:=true;
end else
r:=false;
if not r then
Edit1.Text:=Edit1Text
else
Edit1Text:=Edit1.Text
end;
← →
Ega23 © (2005-01-17 16:14) [2]
procedure TForm1.Edit1Change(Sender: TObject);
var
i,Code:Integer;
begin
Val(Edit1.Text, i, Code);
if Code<>0 then
begin
showMessage("Ошибка в символе №"+IntToStr(Code));
Edit1.SetFocus;
end;
end;
Что-то типа этого...
← →
Ega23 © (2005-01-17 16:15) [3]Вру.
var
Code:Integer;
i:Double;
← →
TUser © (2005-01-17 16:30) [4]
> Ega23 © (17.01.05 16:15) [2,3]
Еще StringReplace(...DecimalSeparator...) 2 раза
← →
Ega23 © (2005-01-17 16:34) [5]Еще StringReplace(...DecimalSeparator...) 2 раза
А нафига? Val и так разберётся... :о)
← →
tolstiak (2005-01-17 16:34) [6]> Ega23 ©
> TUser ©
А черезprocedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
нельзя?
← →
tolstiak (2005-01-17 16:43) [7]вот что с этим можно сделать что бы блокировалось повторное нажатие "." или ",":
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;
← →
Reindeer Moss Eater © (2005-01-17 16:46) [8]блокировалось повторное нажатие "." или ","... как это сделать?
Сделать это легко.
Но ты сначала попробуй догадаться что там вводит юзер.
Например "1,000,000" - это что? Неправильно введенная единица или правильно введенный миллион с разделителем тысяч?
← →
Ega23 © (2005-01-17 16:49) [9]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;
← →
tolstiak (2005-01-17 17:33) [10]>Ega23 ©
неее тут фсе правильно... нажатие "." заменяет на нажатие ","... это нужно...
>Reindeer Moss Eater ©
"Например "1,000,000" - это что? Неправильно введенная единица или правильно введенный миллион с разделителем тысяч?"
по идее такого не могЁт быть потому что должно быть так: "1000000" - это миллион, а "," - только разделитель целой и дробной части числа.
← →
Developerr (2005-01-17 17:39) [11]Используй RxCalcEdit и будет тебе счастье, да и голову морочить не нужно с написанием кода.
← →
tolstiak (2005-01-17 17:42) [12]>Developerr
а где его взять?
← →
tolstiak (2005-01-17 17:49) [13]>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"
:((
← →
Anatoly Podgoretsky © (2005-01-17 17:53) [14]POS
Тольк зачем пользователю мешать вводить? Пусть вводит как хочет, а вот когда кончит вводить тогда и проверить на правильность.
← →
tolstiak (2005-01-18 12:13) [15]>Anatoly Podgoretsky ©
Дык моя задача не дать юзарю не правильно осуществить ввод числа... в этом то и дело...
← →
Reindeer Moss Eater © (2005-01-18 12:15) [16]по идее такого не могЁт быть потому что должно быть так: "1000000" - это миллион, а "," - только разделитель целой и дробной части числа.
Все было бы так просто, если бы у всех были одни и те же идеи.
"1000000" - это безусловно миллион
но "1 000,000.00" - это тоже миллион.
← →
REP © (2005-01-18 13:36) [17]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;
← →
tolstiak (2005-01-18 13:55) [18]>REP ©
If (Key>=#32) and (Not (Key in ["0".."9",",",".",DECIMALSEPARATOR])) Then
Key:=#0.... и т.д.
дает ошибку:"Incompatible types: "Char" and "string"
:((
← →
REP © (2005-01-18 14:04) [19]Ну не знаю, у меня Д5
FormKeyPress(Sender: TObject; var Key: Char)
Может в этом дело. семерку в глаза не видел
← →
tolstiak (2005-01-18 14:52) [20]>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
← →
TUser © (2005-01-18 14:56) [21]
> tolstiak (18.01.05 13:55) [18]
Там уже и точка, и запятая есть. Зачем еще DecimalSeparator в множестве?
← →
KADAN © (2005-01-18 15:00) [22]Предлагаю такое решение (сам пользовал не раз, получается красиво). Вобщем, после ввода числа в Edit1 пользователь должен нажать кнопку Button1. Не надо давать ему нажимать кнопку, пока не введет правильно.
procedure TForm1.Edit1Change(Sender: TObject);
var a:double;
code:integer;
begin
Val(Edit1.Text,a,code);
button1.Enabled:=code=0;
end;
Как плюс, можно как-то ненавязчиво информировать пользователя о неправильном вводе. Например в строке статуса или в каком-нить лейбле.
← →
SergP © (2005-01-18 15:00) [23]Можно при вводе каждого символа проверять все это через StrToCurr,
если єксепшена не возникло, значит такой символ вводить можно, иначе запрещать его вводить...
← →
tolstiak (2005-01-18 15:34) [24]>KADAN ©
>SergP ©
в [20] вполне рабочий код (и только цифры вводятся и одна ",")... только проблема в том что при удалении этой одной "," больше запятая не вводится.
← →
tolstiak (2005-01-18 15:36) [25]Вы уж извените, порой за глупые вопросы просто я всего неделю, как пишу на Дельфи... :)
← →
HSolo © (2005-01-18 16:46) [26]Зачем глобальные флажки-то? Просто проверяйте, есть ли уже в Вашем edit-е DecimalSeparator, и если есть - то не давайте его вводить, примерно так:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key = DecimalSeparator) then
begin
if (Pos(DecimalSeparator, (Sender as TEdit).Text) > 0) then
key := #0;
end
else
if not (Key in ["0".."9", #8]) then
key := #0;
end;
← →
Vit@ly © (2005-01-18 18:13) [27]procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
If ActiveControl is TEdit then
if not(Key in ["0".."9", #8, DecimalSeparator]) then Key := #0;
end;
А DecimalSeparator сам разберется, что в текущих настройках, точка или запятая:)
← →
tolstiak (2005-01-18 18:48) [28]>Vit@ly ©
Разобраться разберется вот только что делать с таким форматом числа напр:"12,,,,,369" или "12,36626,366", а хотелось бы так: "12,3665" и больше "," быть не должно...
← →
Anatoly Podgoretsky © (2005-01-18 19:19) [29]tolstiak (18.01.05 12:13) [15]
Дык моя задача не дать юзарю не правильно осуществить ввод числа... в этом то и дело...
Дык твоя задача этим и будет решена, кстати ниже (HSolo © (18.01.05 16:46) [26]) тебе дали ее решение, не позволили тебе самому найти решение.
← →
Vit@ly © (2005-01-18 21:03) [30]2 tolstiak (18.01.05 18:48) [28]
только что делать с таким форматом числа напр:"12,,,,,369" или "12,36626,366"
а ты не поленись и попробуй ввести такое с [26]
Сомневаюсь, что у тебя (или юзера) это получится
← →
KADAN © (2005-01-19 08:42) [31]а вставка??? shift+ins еще не отменяли.
← →
ghg © (2005-01-19 10:12) [32]есть готовый компонент который учитывает все выше упомянутые ситуации (и вставку из буфера тоже)
раньше он лежал здесь в кладовке, если надо то могу послать
← →
tolstiak (2005-01-19 11:37) [33]>ghg ©
если не трудно намыль. буду благодарен.
>Anatoly Podgoretsky ©
"...не позволили тебе самому найти решение." ну почему ж... частично решение есть [20] (правда не совсем устраивает).
>Vit@ly ©
кстати неполенился - ввел код как в [26]... точек (".") сколько угодно можно ввести на "," нереагирует (#0)... вот так.
← →
ghg © (2005-01-19 11:57) [34]ушло
← →
tolstiak (2005-01-19 12:12) [35]>ghg ©
Большое спасибо!!!
← →
Developerr (2005-01-19 12:32) [36]
> tolstiak
Этот компонент есть в библиотеке RxLibrary и в Jedi JCL/JVCL
Rx Library yужно поискать в интенете, а на Jedi ссылка вот:
http://jvcl.sourceforge.net
← →
ghg © (2005-01-19 12:46) [37]это что написано в шапке того что есть у меня
///////////////////////////////////////////////
//
// FVG Components Library.
// Components: TFloatEdit
// Requires: none
//
// (C) Damage, Inc. 2001.
// (C) Filippov V. DamageInc@e-mail.ru.
//
// Have a nice DamagIng!
///////////////////////////////////////////////
← →
Style © (2005-01-19 13:05) [38]Вот мой компонентик.
http://www.hch.ru/Components/NMKLIB/Source/Controls/NMKNumericEdit.pas
← →
tolstiak (2005-01-19 13:11) [39]Всем!!! большое спасибо за участие!!!!! не дали погибнуть "чайнику"
← →
tolstiak (2005-01-19 16:27) [40]М-де уж... а еще не подскажите как все эти компоненты подключить? что-то... никак.. :(((
прошу прошения [25]
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.049 c