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

Rusland

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

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

  • Посещение

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

    26

Активность репутации

  1. Like
    Rusland отреагировална Brovin Yaroslav в Фильтр по типу "облака тегов"   
    Добрый день,
    Можно взять компонент TFlowLayout с плавающей разметкой внутренних компонентов. Накидывать туда TLabel со специальным стилем и AutoSize. Там где нужен перенос вставлять TFlowLayoutBreak.
    Всплывающий список со списком, я думаю не проблема. Можно взять TPopup с TListBox. Можно просто заюзать пикеры FMX.Pickers.pas. Взять пикер TCustomListPicker
  2. Like
    Rusland отреагировална AngryOwl в Получить голос из микрофона потоками   
    Есть библиотека BASS, которая умеет все вышеперечисленное. И захват с микрофона в потоке, и определение уровня громкости и много чего еще.
    Кроме того, в реальных условиях работы в сети Интернет, при передаче через UDP, не забывайте о максимальном размере пакетов (размер MTU в байтах) - обычно он 1450-1500, но я бы рекомендовал использовать значение 1400 (по личному опыту). Иначе вы будете слышать именно те "щелчки", вместо нормального звука. Т.е. - нужно определить размер буфера принимаемого с микрофона, разбивать его на фрагменты, и отправлять так, чтобы на принимающей стороне собрать в нужной последовательности, а далее - воспроизвести.
  3. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Отобразить маршрут при помощи Google Distance   
    только он давно не обновлялся, нужно его от Indy избавить и переписать на TNetHTTPComponent, чтобы работало стабильно https
    на днях займусь, сам забыл про него...
     
  4. Like
    Rusland отреагировална kami в Будет ли утечка памяти при таком использовании объектов?   
    На Android штатный менеджер памяти не отслеживает утечки.
  5. Like
    Rusland отреагировална Alex7wrt в Зависание приложения при разворачивании после поворота экрана, Android   
    Я так понимаю,у меня одного возникает такая проблема, и никто с таким не встречался?
    Может быть стоит создавать баннер средствами JNI на основе стандартного баннера Android?
    Тут еще такой вопрос: в Berlin есть модуль FMX.Advertising.Android. Есть ли у кого-нибудь опыт работы с этим модулем?
  6. Like
    Rusland получил реакцию от Alex7wrt в Зависание приложения при разворачивании после поворота экрана, Android   
    Запускайте Android Device Monitor
    Путь примерно такой (в зависимости от версии):
    C:\Users\All Users\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\tools\monitor.bat
  7. Like
    Rusland отреагировална Сергей Сергеев в Проблема в Android 6.0   
    есть такой путь.. я его описал чуть выше :
    Придется по новой заполнять всю начальную инфу на сервере ( например там есть список файлов клиента), который получается сканированием определенных директорий, при каждом коннекте , раньше я с клиента просто говорил - дай файл №5 .. в сессии по MemTable искал№5 - брал его путь и отсылал клиенту..
     
    понятно, что все решаемо.. всякими бубнами.. но весь этот стройный и удобный механизм ДатаСнап летит.. используется только для начального заполнения.. к чему эти все циклы статей и видео - как прекрасно на дельфи используя датаснап делать приложения для Анроида, если клиент прибивается, только ты решил отправить СМС? и сесииян на сервере захлопнулась.. со всеми вытекающими..  
  8. Like
    Rusland получил реакцию от Равиль Зарипов (ZuBy) в Проблема в Android 6.0   
    Ярослав как-то упоминал BindService, но до сих пор тема сисек не раскрыта никакой конкретики. Может как-то через TLocalServiceConnection.LocalService можно получить доступ к данным в сервисе? 
     
  9. Like
    Rusland отреагировална Andrey Efimov в как из сервиса узнать, что приложение основное сейчас закрыто   
    Узнать, работает Служба или Приложение, можно попробовать, через методы
    getRunningAppProcesses getRunningServices ActivityManager - getSystemService(ACTIVITY_SERVICE);
  10. Like
    Rusland отреагировална Fedor K в Работа с намерениями в iOS   
    Один из вариантов открытия одного приложения из другого - это использование URL schemes (Ярослав давал выше ссылку).  
    Из приложение А: 
    //отправка uses Macapi.Helpers, FMX.Helpers.iOS; //делаем намерение открыть URL (по сути тоже самое Intent в Android) SharedApplication.openURL(StrToNSUrl(Url)); Приложение Б (подробнее, хотя немного устарело):
    //подписываемся на события if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService)) then aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent); //обработчик function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; var lURL : string; begin case AAppEvent of TApplicationEvent.OpenURL : begin lURL := (AContext as TiOSOpenApplicationContext).URL; //реализуем логику end; Как передать файлы я вижу несколько вариантов:
    - использовать буфер обмена (класс UIPasteboard - думаю не сложно его использовать в FMX, я им пользовался только в Xamarin, на FMX возможно (нужно проверить) можно использовать FMX.Platform.IFMXClipboardService). Перед открытием URL в "А" - сохраняем картинку/файл в буфер обмена, в "Б" при открытии считываем.
    - передавать в URL путь к файлу (это возможно только, если и "А" и "Б" являются приложением одной группы). пример с Object-C.
  11. Like
    Rusland отреагировална Fedor K в Работа с намерениями в iOS   
    1. TMS iCL
    2. DPF- смотрите в сторону TDPFQLPreviewController
    3. Ручками, что-то вроде такого (документация apple):
    var controller : UIDocumentInteractionController; URL: NSURL; {$ENDIF} path : string; temp : Boolean; begin path := ExtractFilePath(ParamStr(0)) + '/Sample.pdf'; {$IFDEF IOS} URL := TNSUrl.Wrap(TNSUrl.OCClass.fileURLWithPath(StrToNSStr(path))); controller := TUIDocumentInteractionController.Wrap( TUIDocumentInteractionController.OCClass.interactionControllerWithURL(URL)); TNSUrl.Wrap(TNSUrl.OCClass.fileURLWithPath(StrToNSStr(path))); temp := controller.presentOpenInMenuFromRect( WindowHandleToPlatform(self.Handle).View.frame, WindowHandleToPlatform(self.Handle).View,true); {$ENDIF} end;  
  12. Like
    Rusland отреагировална Martifan в Получить голос из микрофона потоками   
    Доброго времени сутки
    недавно для себя открыл что можно из микрофона получить данные потоками:
    Uses    ..., Androidapi.JNI.Media;   procedure TForm1.Button1Click(Sender: TObject); var bufferSize: integer;     buffer: TJavaArray<Byte>;     M: TMemoryStream;   begin   audioRecord := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC,                                               44100,                                               TJAudioFormat.JavaClass.CHANNEL_IN_MONO,                                               TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,                                               44100 * 2); (audioRecord as JAudioRecord).startRecording;   buffer := TJavaArray<Byte>.Create(8820); (audioRecord as JAudioRecord).read(buffer, 0, 8820);   (audioRecord as JAudioRecord).stop;   audioRecord.release;   buffer заполняется данными я проверил все работает (можно код прописать чтобы этот buffer проигрывал)
    audioRecord := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC,                                               44100,                                               TJAudioFormat.JavaClass.CHANNEL_IN_MONO,                                               TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,                                               44100 * 2); <--- как мне кажется здесь видно что это формат Wave 
     
     
    я пытаюсь передать это все серверу:
    IdUDPClient1.SendBuffer(IdUDPClient1.Host, IdUDPClient1.Port, RawToBytes(buffer, buffer.Length)); сервер запущен на Windows но не получается я слышу только пикание
     
    Вопрос:
    как мне передать этот поток серверу (среды Windows) и как его проигрывать на сервере, может у кого есть опыт работы с этом сфере или какой нибудь документация имеется или какой нибудь предложение есть как все это сделать все совете и предложении очень важен 
     
    Заранее спасибо согласитесь интересно использовать микрофон так и не дожидая пока он создаст файл
    всем удачи
  13. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Правый клик ListBox   
    отвяжите TPopupMenu от TListBox
    procedure TForm4.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var aItem: TListBoxItem; begin if Button = TMouseButton.mbRight then begin aItem := ListBox1.ItemByPoint(X, Y); if aItem = nil then exit; ListBox1.ItemIndex := aItem.Index; PopupMenu1.Popup(Screen.MousePos.X, Screen.MousePos.Y); end; end;  
  14. Like
    Rusland получил реакцию от Vitaldj в Проблема в Android 6.0   
    Если хотите увидеть как на аппарате с 2Гб приложение будет выключено системой, то активнее полазайте по сайтам в браузере - например, откройте картинки в Google... через какое-то время приложение "помрет"
    PS. Еще можете установить какую-нибудь прожорливую игрушку и поиграть в нее
  15. Like
    Rusland отреагировална Andrey Efimov в WiFi Info   
    Название: WiFi Info
    Платформа: Android 4.1.2 или более поздняя
    Тип устройства: смартфон, планшет
    Актуальная версия: 1.1.0
    Ссылка: Google Play
    Описание:
    Приложение позволяет просматривать полную информацию об активном подключении, сканировать Wi-Fi точки и просматривать информацию о них, а также просматривать информацию о конфигурациях для сохранённых точек доступа. Есть возможность настроить автоматическое обновление информации.

    Поддержка Android 4.1.2 и выше.

    Приложение протестировано на устройствах:
    LG-P705 - Android 4.1.2
    Huawei Y541-U02 - Android 4.4.2
    Xiaomi Redmi Note 3 - Android 5.0.2 LRX22G (MIUI by xiaomi.eu stable 7.3.1)
    Samsung SM-T585 Galaxy Tab A 10.1 - Android 7.0
     
  16. Like
    Rusland получил реакцию от Andrey Efimov в Проблема в Android 6.0   
    На текущий момент и сервис не работает так как ожидается - после смерти от системы, приложение зависает при старте.
  17. Like
    Rusland получил реакцию от Andrey Efimov в Проблема в Android 6.0   
    Это не поможет
  18. Like
    Rusland получил реакцию от Andrey Efimov в Проблема в Android 6.0   
    Да, есть сервисы. Стоит изучить темы тут
    Android сервисы никак не портировать на iOS
  19. Like
    Rusland отреагировална AngryOwl в Локализация приложений   
    Друзья!
    Я тут в одной теме выложил юнит для локализации приложений и демо-пример к нему, а также приложение облегчающее создание и редактирование ресурсов для локализации (файлов с переводами на разные языки).
    Потом подумал - может стоит вынести это в отдельную тему?
    Данная проблема (локализации приложений) возникла уже давно. На заре XE2. Потом были все версии, вплоть до текущей. Но лично меня текущие решения так и не  устраивали. Мне нужно было простое и удобное редактирование сразу всех языков приложения, и чтобы быстро работало.
    Тогда и были созданы этот юнит и приложения, с которыми я решил с вами поделиться. Создано это было для себя, для упрощения локализации собственных приложений. Поэтому никакой "красоты" кода прошу не искать - ее там нет. Местами вообще кому-то покажется "кривым"... )
    Очень жаль, что у меня критически мало времени для общения на данном ресурсе, а потому я в некотором смысле извиняюсь - мог бы выложить этот код давно.
    Тем-более, что он очень простой. Все что в нем используется, и как используется, думаю, всем будет доступно и понятно.
     
    Итак.
    Приложение Test_Translator - это дело пример с, непосредственно, самим юнитом uTranslatorFM.pas
    В uTranslatorFM.pas вы увидите, что локализация осуществлена за счет использования INI-файлов, а сам "перевод" осуществляется простым перебором компонент на форме.
    Стоит отметить, что перевод осуществляется использованием свойства компонент HelpContext (integer), а у компонент, что не имеют этого свойства - используется свойство Tag.
    На первый взгляд может показаться неудобным. А если приложение большое - что-то может забыться. Однако, лично я очень быстро привык к такому использованию. И поверьте  - приложение, в котором я использую этот юнит, очень большое! )))
    Кроме того, если есть компоненты, которые не имеют этих свойств, или которые могут менять значение перевода самостоятельно, либо могут быть динамическими - можно использовать нулевой HelpContext, но при этом придавать им значения "вручную".
    Например: если требуется у компонента TLabel динамически менять значение в ходе выполнения программы, подставляя нужные "подстроки" (грубо - используя, например, Format(...)), то можно написать в программе
    Label1.Text := Format( AppTranslator.GetValue(_код_, _значение_по_умолчанию_), [_подставляемое_значение_]); где
    _код_ - это значение, которое будет считываться из INI-файла (например 100)
    _значение_по_умолчанию_ - значение строки по умолчанию, на тот случай, если данный текст отсутствует в INI-файле, или файла с таким переводом не существует (этот параметр не обязателен)
    _подставляемое_значение_ - в данном случае это просто пример, допустим - ход выполнения процесса (например 85%)
    А строка в INI-файле может быть такая:
    (файл lang.ru)
    100=Процесс выполнения %d%%
    (файл lang.en)
    100=The progress %d%%
    и также другие языки.
    Думаю тут, в примере, все элементарно и понятно.
    Все работает на любой платформе!
    Как вы будете подключать файлы к приложению - ваше дело. Можно скачивать с инета, можно встроить в качестве ресурсов, задеплоить в проект и т.д.
    Лично я встраиваю в качестве ресурсов (Win) и деплою (Mac и Android). У меня свои причины и аргументы.
    Файлы:
    Lang.ru
    Lang.en
    и другие, это INI-файлы соответствующих переводов где строки с переводами имеют одинаковые индексы
    LangList.ini - вспомогательный файл (разберетесь))
    language.rc - файл для создания ресурса (Win)
     
    С приложением SLLanguage все немного и сложнее и проще, одновременно...
    Не вижу смысла его описывать - оно просто позволяет редактировать описанные выше ресурсы (файлы языков).
    Часть его кода откуда-то позаимствовано (не помню уже).
     
    Для чего все это я отдельно решил написать, в отдельную тему?
    Предлагаю всем пользоваться данным кодом - кому как заблагорассудится! Исправлять, дополнять и делится мыслями и идеями.
    Возможно кто-то решит создать компонент.
    Ну вот вроде все, друзья!
    Если что - спрашивайте! Отвечу по мере возможности.
    P.S. К модераторам - поправьте, если что, - вдруг не в ту тему закинул.
    SLLanguage.zip
    Test_Translator.zip
    P.P.S. Забыл уточнить - дело-пример делал под XE10, а приложение для создания ресурсов под XE7. Не сложно поправить - кому под что нужно.
  20. Like
    Rusland получил реакцию от Равиль Зарипов (ZuBy) в Проблема в Android 6.0   
    Да, есть сервисы. Стоит изучить темы тут
    Android сервисы никак не портировать на iOS
  21. Like
    Rusland получил реакцию от Равиль Зарипов (ZuBy) в Проблема в Android 6.0   
    Это не поможет
  22. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Проблема в Android 6.0   
    установите из маркета AppStatusWatcher, оно показывает потребление памяти приложением.
  23. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в TRESTLight - облегченная версия   
    Доброго времени суток!
    Навеяно этой темой.
    Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
    Решил собрать аналогичный пример, только не использовать TREST***
    немного опишу, свою реализацию
    uAppSettings.pas - хранит описание вашего приложения созданного в ВК  FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст
    var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы
    var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
    GitHub   TRESTLight.zip
  24. Like
    Rusland отреагировална Pax Beach в После "сна" программа с сервисом не стартует   
    Лучше указать параметры SDK, с которыми компилируешь приложение, и платформу на которой тестируешь.
    И, если честно, по-русски не очень понятно, что ты имеешь ввиду. А гугл транслятор справиться с переводом сам.
    Я плюсанул )
  25. Like
    Rusland отреагировална rareMax в [Статья][AdMob] Добавляем рекламный блок в приложение   
    На канале в телеграмме кто то рассказывал как использовать видео рекламу на андроиде
×
×
  • Создать...