Перейти к содержанию
  • Регистрация
  • 0
abwabw

Мне кажется, что TNumberBox работает не так

Вопрос

DelphiXE5 Update2 и DelphiXE6 оба с MobileAddOn фсё лицензионное.

Ситуация: создаю FireMonkey Mobile App. На форме размещаю компонент NumberBox (надо вводить цену), присваиваю свойства:

Value=0
Text=0
Min=0
Max=100000
HorzIncrement=0
VertIncrement=0
ValueType=Float
DecimalDigits=2 

Проблема: Запускаю на гаджете приложение, получаю при запуске пустое поле NumberBox -а (хотя должен стоять 0), ставлю курсор в поле NumberBox, и дальше реакция раздваивается в зависимости от модели гаджета на Google Nexus 5 при вводе цифр - ввод начинается, а на Sony Xperia Z, Samsung GalaxyS4, Samsung Note 3 и других при нажатии на клавиши виртуальной клавиатуры цифры не вводяться. Ситуацию можно исправить только "танцем с бубном", если после запуска приложения поставить курсор в поле NumberBox , потом выйти из него куда-нибудь, а потом опять поставить курсор  в поле NumberBox, появиться предустановленный 0 и  ввод цифр начнётся на любом гаджете.

Проблема2: если всё-таки ввести цифры в поле, а потом стереть их BackSpace-ом и перейти в другое поле приложения, то стёртое число опять появится в поле.

Вопрос: Как заставить  NumberBox сразу и предсказуемо работать на любом гаджете?

 

Ситуация2: Решил заменить кривоработающий TNumberBox на TEdit с ограничением ввода символов, через отлов переменной var KeyChar: Char события OnKeyDown . Разместил TEdit, в событии OnKeyDown пишу:

  case keyChar of
  '0'..'9': ;
  '.'     : //точка
            if (length((Sender as TEdit).Text)=0)    //первой точку не ставить
            or (ansiPOS('.',(Sender as TEdit).Text)<>0) //ещё одну точку не ставить
            then keyChar:=#0;
  else keyChar:=#0;
  end;

Проблема: Но оказалось, что OnKeyDown не срабатывает на точку, запятую, знак минус и пробел (которые есть на вируальной клавиатуре "NumberPad") , т.е. эти символы вводятся в поле TEdit, а OnKeyDown не реагирует на них.

Проверил так, в событии OnKeyDown  написал:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  ShowMessage('KeyChar='+KeyChar+' Key='+IntToStr(Key))
end;

Получаю сообщение только при нажатии на кнопки с цифрами, при нажатии на любые не буквенные/цифровые кнопки OnKeyDown не срабатывает.

Пробовал использовать переменную var Key: Word;события OnKeyDown так при любых нажатиях клавиш выдаётся, что  Key=0. Может я чего-то не догоняю???

 

Вопрос: как заставить нормально срабатывать событие OnKeyDown у TEdit на любое нажатие кнопок и получать нормальное значение в переменную Key:Word?

 

З.Ы. Под Windows(x32) OnKeyDown реагирует на все кнопки, но переменная Key всё равно =0; (см.рис.).

 

post-158-0-67386900-1401782970.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

Вообще всегда приходит либо KeyChar, либо Key. Вроде бы об этом написано в тут и тут.
Key - это код виртуальной клавиши vkXXX. Он зависит от конкретной нажатой клавиши, при чем на разных платформах он приводится к виндовым эквивалентам. 
KeyChar - это символ который может быть изображен где-нибудь в поле ввода. Он зависит от текущего языка, раскладки, IME, способа ввода (в числе прочего можно использовать голосовой ввод) и еще неизвестно чего, короче его подставляет система по не известным в общем случае правилам. 
Сделано так специально, чтобы не путали и не пытались выводить в виде текста букву А, когда нажато сочетание клавиш Ctrl+A. Эти два параметра принципиально по разному обрабатываются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Тоже столкнулся с проблемой, что нет реакции, если ввести точку, запятую, минус, плюс, скобки, решётку. Т.е. вообще событие не срабатывает.

а на цифры есть реакция.

тынц

 

Delphi 10.1 Berlin

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...