Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-52223
DeScriptor
2003-12-05 08:02
2003.12.16
TThread...


3-52114
Belocarsk
2003-11-24 06:04
2003.12.16
Помогите чайнику с запросом


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


1-52208
IronHawk
2003-12-05 16:12
2003.12.16
Приветствую Мастеров! Вопрос про TPageControl, проские закладки..


8-52286
Crypter
2003-08-18 10:03
2003.12.16
JPEG кодер/декодер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский