Код закоментирован просто чтоб показать какие варианты испробовал.
Как уже писал в комментариях if not (KeyChar in ['1'..'9']) then keychar:=#0; , как и просто проверка символа с помощью if работает для цифр. В вашем коде таже проверка символов. Попробовал сейчас
Ch := TFormatSettings.Create.DecimalSeparator;
if keychar=ch
then
keychar:=#0; все равно не отлавливает ни точку ни запятую
Еще так сделал
procedure TForm1.Edit1ChangeTracking(Sender: TObject);
var s: string;
begin
s:=Edit1.Text;
Edit2.Text:=Edit1.Text;
if (pos('.',s)<>0) or (pos(',',s)<>0) or (pos(',',s)<>0) or (pos('.',s)<>0) or (pos(',',s)<>0) or (pos('.',s)<>0)
or (pos('-',s)<>0) or (pos('-',s)<>0) or (pos('-',s)<>0) or (pos('-',s)<>0)or (pos('0',s)<>0) or (pos('0',s)<>0)
or (pos('0',s)<>0) or (pos('0',s)<>0)then
begin
delete(s,pos('.',s),1);
Edit1.Text:=s;
end;
end;
повторяющиеся точки и запятые это просто вводил из интереса при русской и английской раскладке клавиатуры откоплилировал для виндовс чтоб побыстрее так вот из всего выражения проверяются только точки , хоть в анг. хоть в русской раскладке. И не какой реакции на остальные символы и даже на ноль . Просто хочется разобраться покоя не дает когда что то не понятно. К сожалению недавно перешел на XE7 с Delphi7 очень много изменений. И спасибо за участие буду дальше копать.