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

Kitty

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

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

  • Посещение

  • Победитель дней

    16

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

  1. Пункт №2 предусматривает наличие сервера в Плесе и хороший интернет?

    И все таки как бы вы гуру решали этот вопрос окончательно исходя из реалий провинции и времен года?

     

  2. Вот берем, к примеру, город Плес, где Левитан на Волге писал свои картины. Каждую группу туристов сопровождает гид, и каждый гид рассказывает свою историю и понимание истории. Довольно часто бред.

    Берем по городу и в 20-и местах развешиваем антивандальные маячки: https://accent-systems.com/product/ibks-plus/

    При входе в зону действия маячка запускаем нужный аудио файл и слушаем информацию на телефоне.

    Вопрос, можем ли мы эти двадцать аудио файлов засунуть в apk, или надо с мером Плеса договариваться о хорошем интернете и сервере для получения данных в нужной точке для туристов?

    Как правильно покрыть город аудио гидом?

    Спасибо.

  3. Если FireDAC - ком не будет заниматься автор Дмитрий Арефев - конец этому продукту. Если FMX не будут заниматься специалисты уровня Ярослава Бровина - конец этому продукту. Если Идера их не привлечет к работе - гудбай ide  в течении года. Подпись -  провидица Ванга. :)

  4. Проект использует файл UVibrate.pas

    unit UVibrate;
     
    interface
     
    procedure Vibrate;
     
    implementation
     
    {$IFDEF ANDROID}
    uses
      Androidapi.JNI.Os,
      Androidapi.JNI.GraphicsContentViewText,
      Androidapi.Helpers,
      Androidapi.JNIBridge;
    {$ENDIF}
    {$IFDEF IOS}
    uses
      IOSapi.MediaPlayer,
      IOSapi.CoreGraphics,
      FMX.Platform,
      FMX.Platform.IOS,
      IOSapi.UIKit,
      Macapi.ObjCRuntime,
      Macapi.ObjectiveC,
      iOSapi.Cocoatypes,
      Macapi.CoreFoundation,
      iOSapi.Foundation,
      iOSapi.CoreImage,
      iOSapi.QuartzCore,
      iOSapi.CoreData;
    {$ENDIF}
     
    {$IFDEF IOS}
    const
      libAudioToolbox = '/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox';
      kSystemSoundID_vibrate = $FFF;
     
    procedure AudioServicesPlaySystemSound( inSystemSoundID: integer ); cdecl; 
    External libAudioToolbox Name _PU + 'AudioServicesPlaySystemSound';
    {$ENDIF}
     
    procedure Vibrate;
    {$IFDEF ANDROID}
    var
      Vibrator: JVibrator;
    {$ENDIF}
    begin
    {$IFDEF ANDROID}
      Vibrator := TJVibrator.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE) 
    as ILocalObject).GetObjectID);
      // Vibrate for 500 milliseconds
      Vibrator.vibrate(500);
    {$ENDIF}
    {$IFDEF IOS}
      AudioServicesPlaySystemSound( kSystemSoundID_vibrate );
    {$ENDIF}
    end;
     
    end.

    После апдейта 2 ошибка компиляции:

    [ld Error]   Error: "_AudioServicesPlaySystemSound", referenced from:      __ZN8Uvibrate28AudioServicesPlaySystemSoundEi in .\\iOSDevice64\\Release\\UVibrate.o;


    Как исправить?

  5. Проект прекрасно компилировался без апдейта 2 а теперь имеем ошибку на строке:
    _di_JIntent intent;
    intent = new TJIntent;

    [bccaarm Error] UnitServis.cpp(131): no viable overloaded '='
      systobj.h(312): candidate function not viable: no known conversion from 'Androidapi::Jni::Graphicscontentviewtext::TJIntent *' to 'const DelphiInterface<Androidapi::Jni::Graphicscontentviewtext::JIntent>' for 1st argument
      systobj.h(329): candidate function not viable: no known conversion from 'Androidapi::Jni::Graphicscontentviewtext::TJIntent *' to 'Androidapi::Jni::Graphicscontentviewtext::JIntent *' for 1st argument
      systobj.h(303): candidate template ignored: could not match 'DelphiInterface<type-parameter-0-0>' against 'Androidapi::Jni::Graphicscontentviewtext::TJIntent *'

    Если написать так:
    _di_JIntent intent = new TJIntent;

    Ошибка:
    [bccaarm Error] UnitServis.cpp(131): no viable conversion from 'Androidapi::Jni::Graphicscontentviewtext::TJIntent *' to '_di_JIntent' (aka 'DelphiInterface<Androidapi::Jni::Graphicscontentviewtext::JIntent>')
      systobj.h(261): candidate constructor not viable: no known conversion from 'Androidapi::Jni::Graphicscontentviewtext::TJIntent *' to 'const DelphiInterface<Androidapi::Jni::Graphicscontentviewtext::JIntent> &' for 1st argument
      systobj.h(268): candidate constructor not viable: no known conversion from 'Androidapi::Jni::Graphicscontentviewtext::TJIntent *' to 'Androidapi::Jni::Graphicscontentviewtext::JIntent *' for 1st argument
      systobj.h(254): candidate template ignored: could not match 'DelphiInterface<type-parameter-0-0>' against 'Androidapi::Jni::Graphicscontentviewtext::TJIntent *'
      systobj.h(278): candidate template ignored: disabled by 'enable_if' [with TArg = Androidapi::Jni::Graphicscontentviewtext::TJIntent *]

    Как исправить?

     

  6. ASovtsov

    и сразу глобальный для меня вопрос: в последние релизы было видно, что С++ Builder подтянули. Отставание от Дельфи только сейчас в двух пунктах:

    1. Не возможно создавать сервисы для Андроида.

    2. Не возможно использовать эмулятор в проектах iOS.

    А вопрос такой: каково будущее С++ Builder на фоне последних событий?

    Спасибо.

     

  7. Основатель FMX Евгений Крюков в поисках работы: https://plus.google.com/u/0/105338484741532774705/posts/SnK5twK939Y

    Основатель FireDAC Дмитрий Арефьев тоже больше не работает.

    По Вашему мнению какие все же перспективы RAD при такой кадровой политике?

  8. В документации рассказано как поделиться текстом в соц. сетях из своего приложения. Чтобы это сделать у компонента должно быть в инспекторе объектов свойство Action (например кнопка). У меня ListBox служит как выпадающее меню и один из итемов хотелось бы по клику задействовать как поделиться в соц. сетях. Однако у ListBoxItem нет свойства Action. Как правильно решить эту задачу: при клике на ListBoxItem - поделиться текстом в соц. сетях? Спасибо.

  9. В 17.11.2016 в 13:40, Steepe_Hare сказал:

    Вот смотрю я на некоторые мобильные приложения (Android), аж глаз радуется. И дело не в цветастости или пестроте, а действительно все элементы выглядят красиво и профессионально.

    А у меня интерфейс моих мобильных приложений, сделанных в Embarcadero, вызывает тоску. И цветовые гаммы меняю контролей и прочее делаю - всё не так.

    А как у вас?

    Приобретите курсы Ярослава и ваши приложения перестанут быть тусклыми.

  10. По этой ссылке, есть пример с кодом, движения человека относительно маячка и реакция на это:

    https://community.embarcadero.com/blogs/entry/developer-skill-sprint-proximity-awareness-with-beacons

    Используется событие маячка OnBeaconBeaconProximity (TBeaconProximity::Immediate, TBeaconProximity::Near, TBeaconProximity::Far, TBeaconProximity::Away)

    Мой эксперимент показал, что маячок может просто лежать на столе и произойдет многократно какое-то событие в зависимости от расстояния (TBeaconProximity::Immediate или TBeaconProximity::Near...). Т.е. в течении несколько секунд может произойти одно и то же событие. Какой правильный подход применить, чтобы отсечь лишние сработки в OnBeaconBeaconProximity? Может надо вычислять расстояние и как-то отсекать повторные не нужные сработки?:

    http://docwiki.embarcadero.com/Libraries/Berlin/en/System.Beacon.IBeacon.Distance

    Просто хочется узнать правильный подход. Спасибо.

     

  11. Большое спасибо. На основании вашего кода, получилось такая конструкция. На первый взгляд вроде работает, но насколько надежно пока не знаю. :)

    String WEBLink = ***
    
    ListBox2->Clear();
    	 int i;
    	 for (i = 0; i < ListBox1->Count; i++)
    	 {
    	   if(CompareStr(WEBLink, ListBox1->ItemByIndex(i)->ItemData->Detail) == 0)
    	   {
    		int j = i;
    		while(j >= 0)
    		  {
    		   if(ListBox1->ItemByIndex(j)->ClassName() == L"TListBoxGroupHeader")
    			 {
    			  TListBoxGroupHeader * ListBoxGroupHeader = new TListBoxGroupHeader(ListBox2);
    			  ListBoxGroupHeader->Text = ListBox1->ItemByIndex(j)->Text;
     			  ListBoxGroupHeader->Parent = ListBox2;
    			  break;
    			 }
    		   j--;
              }
    
    		TListBoxItem * aItem = new TListBoxItem(ListBox2);
    		aItem->Text = ListBox1->ItemByIndex(i)->Text;
    		aItem->ItemData->Detail = ListBox1->ItemByIndex(i)->ItemData->Detail;
    		aItem->ItemData->Accessory = static_cast<TListBoxItemData::TAccessory>(1);
    		aItem->Parent = ListBox2;
    		break;
    	   }
    	 }

    Есть ли существенная разница как добавлять?

    ListBoxGroupHeader->Parent = ListBox2;

    или

    ListBox2->AddObject(ListBoxGroupHeader); 

     

  12. Спасибо. Картина проясняется у меня почему-то не работала подсказка после стрелки ListBox1->ItemByIndex(i)-> и поэтому не понятно было как добраться до ItemData. Благодаря вашему коду теперь понятно. Однако остался вопрос, у списка присутствуют заголовки TListBoxGroupHeader. Как получить заголовок которому принадлежит aItem: TListBoxItem?

  13. Пока не доходит...

    	 for (int i = 0; i < ListBox1->Count; i++)
    	 {
    	   ListBox1->ItemByIndex(i);
    	   //как сравнивать с ItemData->Detail ?
    	 }

    У меня есть детальный текст, его надо найти в списке и понять к какому заголовку он принадлежит и какой у него основной текст...

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