Перейти к содержанию
Fire Monkey от А до Я

abwabw

Пользователи
  • Постов

    4
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные abwabw

  1. 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

  2. Отвечаю сам себе.

    Реализовать на XE5 FM mobile (и по моему и на XE6) распознавание голоса пока невозможно в связи с тем, что ембаркодеровцы в delphi не реализовали дроидовской модуль API: android.speech.

    Хотя странно это, этот модуль в дроиде существует с 8 левела, а щаз актуальый уже 19-ый.

  3. Хочу попробовать прикрутить к проекту для дроида googl-овское распознавание голоса. Нашёл пример реализации этой функции вот тут или тут.
    Помогите перевести на XE5 FM, вот этот кусок:

    package com.genisoft.inforino;
    import java.util.List;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.content.pm.ResolveInfo;
    import android.net.Uri;
    import android.speech.RecognizerIntent;
    
    public class SpeechRecognitionHelper {
        public static void run(Activity ownerActivity) {
                startRecognitionActivity(ownerActivity);
            }            
        }
     
        private static void startRecognitionActivity(Activity ownerActivity) {
            Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Голосовой поиск Inforino");
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);    
            intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ru-RU");
            ownerActivity.startActivityForResult(intent, SystemData.VOICE_RECOGNITION_REQUEST_CODE);
        }
    
×
×
  • Создать...