Извиняюсь если такая тема уже была, но я не нашел...Вобщем нужно чтоб в поле Edit вводились только цифры и запятая, а остальные нажатия клавишь игнорировались(ну кроме может быть backspace), т.е. нужно избежать ошибок типа Invalid Floating Value...Я написал но что то не очень она работает...если кто сталкивался подскажите пожалста.Вот код
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var set1:set of ord('0')..ord('9');
s:string;
begin
set1:=[ord('0'),ord('1'),ord('2'),ord('3'),ord('4'),ord('5'),ord('6'),ord('7'),ord('8'),ord('9')]+[ord(',')];
if (not(key in set1)) and (key<>VK_BACK) and (key<>ord(','))
then
ShowMessage('Ошибка ввода');
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9', #8:;
',', '.': if Pos(DecimalSeparator, Edit1.Text) = 0 then
Key := DecimalSeparator else Key := #0;
else
Key := #0;
end;
end;
Как вариант:
setWindowLong(Edit1.Handle, GWL_STYLE, getWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER)
То Klem4: Нет минус не нужен...а что такое DecimalSeparator?
десятичный разделитель
Спасибо..все работает