Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Внизформат ввода для 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 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c