фильтрация ввода

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

фильтрация ввода

Сообщение grigoreo » 09.02.2010 15:12:39

Уважаемые форумчане подскажите кто как реализует следующий момент,
необходимо в компоненте TEdit, не допусть ввод никаких символов кроме цифр, далее я не знаю длину вводимой цифры и разрешить стирание

Код: Выделить всё
procedure TFMain.KeyPress(Sender: TObject; var Key: Char);
begin
  if not(((Key>='0') and (Key<='9')) or (Key=#8)) then Key:=#0;
end;

procedure TFMain.KeyEditInt(Sender: TObject; var UTF8Key: TUTF8Char);
begin
  if not(((UTF8Key>='0') and (UTF8Key<='9')) or (UTF8Key=#8)) then UTF8Key:=#0;
end;


данный код работает под виндовз, но под линуксом пропускает английские буквы если их быстро вводить а руские проскакивают запросто, в чем дело не могу понять
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: фильтрация ввода

Сообщение Light13 » 09.02.2010 15:29:51

Всегда юзаю этот код - ни разу не подводил:
Код: Выделить всё
  if not(Key in ['0'..'9', #8]) then
    Key:=#0;


Добавлено спустя 12 минут 42 секунды:
для utf8
Код: Выделить всё
  if not(UTF8ToSys(UTF8Key)[1] in ['0'..'9', #8]) then
    UTF8Key:=#0;
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: фильтрация ввода

Сообщение grigoreo » 10.02.2010 12:28:51

спасибо кое что помогло но все равно не все нравится, получается под форточкой все нормально потому как очередность такая сначала обрабатывается событие UTF8KeyPress потом KeyPress
я присваиваю в последнем значение #0 и все в ажуре, а вот с линуксом в частности под GTK+ получается немного по другому,
в английском раскладе вызываются оба события а в рускоязычном только UTF8KeyPress, (может конечно у меня одного такой глюк),поставил в итоге оба фильтра на оба события, но все равно если очень быстро нажимать кнопки то под GTK+ некоторые символы проскакивают,

и еще может кто знающий или разработчкик подскажет почему если я гашу переменую Key в UTF8KeyPress ее отредактированое значение не уходит по цепочке дальше в KeyPress приходится гасить и там и там, по логике это как бы не правильно раз я изменил проходную переменую она должна изменится и по всей цепочки обработки событий у даной компоненты
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

Рейтинг@Mail.ru