Ограничение на вод только цифр в поле

Есть следующая процедура, ограничивающая поле для ввода только цифр
var  i:integer;procedure TForm1.DBEdit5Change(Sender: TObject);beginFor i:=1 to Length(DBEdit5.Text)do beginif DBEdit5.Text[i] in ['0'..'9'] thenelsebeginApplication.MessageBox('Данное поле предназначено только для ввода цифр', 'Ошибка ввода!', MB_ICONWARNING);DBEdit5.Text:=copy(DBEdit5.Text,1,i-1);end;end;end;
Но так писать некорректно. При написании возникли следующие проблемы: перед in ['0'..'9'] никак не желает ставится отрицание, пришлось извращаться и писать обработку в else вместо thenПосле удаления некорректного символа курсор перемещается в начало DBEdit, что не хорошоПомогите исправить, пожалуйстаИ ещё нужно чтобы после ввода 4 символов автоматически вставлялся пробел. Как это сделать?
10 ответов

1. if not(DBEdit5.Text[i] in ['0'..'9']) then2. прежде чем городить такой обработчик мощный, попробуй TMaskEdit с маской "0000;1;_", например.


1. if not(DBEdit5.Text[i] in ['0'..'9']) then
спасибо, помогло
2. прежде чем городить такой обработчик мощный, попробуй TMaskEdit с маской "0000;1;_", например.
Это конечно замечательно, но это поле подключено к базе данных, и не придется ли потом городить мощный обработчик чтобы подключить к TMaskEdit столбец БД?


Если придется делать мощный обработчик поля ввода - значит, есть ошибка в архитектуре программы. Попробуй вообще не использовать TDBEdit и тп. Можно самому формировать SQL запрос к базе на основании ввода пользователя.


Если придется делать мощный обработчик поля ввода - значит, есть ошибка в архитектуре программы. Попробуй вообще не использовать TDBEdit и тп. Можно самому формировать SQL запрос к базе на основании ввода пользователя.
Мы видимо друг друга не поняли. Просто если использовать TMaskEdit к базе прийдется подключаться ручками. Ведь у него нет возможности подключения через datasource. Или я ошибаюсь?


Есть следующая процедура, ограничивающая поле для ввода только цифр
А не проще поле в таблице сделать числовым?  


А не проще поле в таблице сделать числовым?  
Не проще. На столбце ограницение а на поле ввода нет. Возникает исключительная ситуация которую надо обработать


Если стоит jvcl то можно заюзать TJvDBSpinEdit.


Если стоит jvcl то можно заюзать TJvDBSpinEdit.
Нет не стоит. Но спасибо за информацию.


По моему значительно проще не изобретать велосипед и пользоваться дедовскими методами:
procedure TForm1.DBEdit5KeyPress(Sender: TObject; var Key: Char);begin  if not(Key in ['0'..'9']) then key := #0;end;


1:2:3:4:procedure TForm1.DBEdit5KeyPress(Sender: TObject; var Key: Char);begin  if not(Key in ['0'..'9']) then key := #0;end;
Огромное спасибо! Этого я собственно и добивалась