Вниз
Скачать: CL | DM;

формат ввода для Edit   Найти похожие ветки 

← →
чайник   (2003-12-05 10:15) [0]

Добрый день, подскажите пожалуйста, как определить формат для ввода значений типа float, или как организовать проверку данного значения Edit.Text: допустим введенное число 15,2, а пользователь ввел 15.2 и поэтому вылетает ошибка EConvert. Маски полей определены в SimpleDataSet, но данные вводятся и редактируются с допол. формы. Спасибо.


← →
Denis ©   (2003-12-05 10:24) [1]

Проверять вводимый разделитель на соответствие DecimalSeparator.
Или фильтровать вводимые символы по кодам клавиш...


← →
Shirson ©   (2003-12-05 10:25) [2]


var
Form1: TForm1;
s:string;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
s:="";
end;

procedure TForm1.Edit1Change(Sender: TObject);
var p:integer;
begin
p:=edit1.SelStart-1;
try
strtofloat(edit1.Text)
except
begin
edit1.Text:=s;
edit1.SelStart:=p;
end;
end;
s:=edit1.Text;
end;


← →
Term ©   (2003-12-05 10:25) [3]

используй MaskEdit, или в событии OnKeyPress значение KEY и меняй на нужное, хотя нафига всё это десятичный разделитель вроде настраиваемая величина


← →
REP ©   (2003-12-05 10:41) [4]

А я делаю так

procedure TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If (Key=".") Or (Key=",") Then
Key:=DECIMALSEPARATOR
end;


← →
HSolo ©   (2003-12-05 11:30) [5]

> REP © (05.12.03 10:41) [4]
А если пользователь введет 2 разделителя?


← →
Silver Alex ©   (2003-12-05 11:38) [6]

можно еще так извратиться :))

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
function IsCorrect(const s: String): Boolean;
begin
try
StrToFloat(s);
Result:=true;
except
Result:=false;
end;
end;
begin
if (key in ["0".."9",#13,#8,DecimalSeparator]) and IsCorrect((Sender as TEdit).Text+key) then
inherited
else
Key:=#0;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
var
f:double;
begin
try
f:=StrToFloat(Edit1.Text);
Edit1.Text:=FloatToStr(f);
except
Edit1.Text:="0";
end
end;


← →
vl_chel ©   (2003-12-05 13:33) [7]

2 > Silver Alex
Зачем так сложно извращаться


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
KT : Char;
begin
KT := Key;
Key := #0;
if KT in ["0".."9","-",#8] then Key := KT;
if Key in [".",","] then Key := DecimalSeparator;
if Pos(TEdit(Sender).Text,DecimalSeparator)<>0 then Key := #0;
//Проверка на наличие разделителя
// проверь параметры ф-ции Pos
end;


← →
Silver Alex ©   (2003-12-05 14:11) [8]


> vl_chel © (05.12.03 13:33) [7]
> 2 > Silver Alex
> Зачем так сложно извращаться

ну это ты сгоряча :))

что это?сначала
Key := #0;
а потом
if Key in [".",","] then Key := DecimalSeparator;
ты понял что здесь DecimalSeparator никогда не поставится? это бага.А еще можно попробовать ввести в Edit 00012 что получится? наверняка у меня не самый оптимальный код, но твой вообще не работает :))


← →
Романов Р.В. ©   (2003-12-05 14:45) [9]

Во избежание всяких непредусмотренных случав проверку надо осуществлять по окончании ввода можно в обработчике onExit.
Проверка очень простая - преобразовать строку в число. Если возникло исключение, то сообщить пользователю что нужно откорректировать число.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: -0.989 c
9-52046
mrk
2003-06-01 00:03
2003.12.16
Плагин для d3max - экспорт в md2


1-52192
vlv
2003-12-03 13:08
2003.12.16
TreeView. При выборе узла он отображается иконкой с индексом 0.


14-52383
Vlad Oshin
2003-11-21 16:36
2003.12.16
Михаилов с праздником!


1-52174
Hsite
2003-12-02 12:52
2003.12.16
Послать ключ реестра на e-mail


14-52391
Brahman
2003-11-21 14:26
2003.12.16
Женщина == Web-service




   Наверх