Alex7wrt

Пользователи
  • Публикаций

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

  • Посещение

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

    18

Весь контент Alex7wrt

  1. var Player: JMediaPlayer; Единожды создаете плеер и готовите файл: Player:=TJMediaPlayer.Create; Player.setDataSource(StringToJString('Путь_к_файлу')); Player.prepare; И, когда потребуется, запускаете воспроизведение Player.start; В uses нужно добавить что-то из этого: FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Media, Androidapi.JNI.JavaTypes, Androidapi.JNI.AdMob, Androidapi.JNI.App, Androidapi.JNIBridge, FMX.Advertising, FMX.Platform.Android, Androidapi.JNI.Embarcadero Не помню уже, что именно. Ненужные уберите
  2. Alex7wrt

    Размеры формы на разных устройствах

    var ScreenService: IFMXScreenService; scale: single; begin if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then scale:=ScreenService.GetScreenScale; end; Эту фишку придумали не разработчики FireMonkey. Коэффициент масштаба экрана используется и в iOS, и в Android. Введен он для более удобного перевода ПО под новые экраны. Смысл в том, что оперируя тем же логическим размером экрана, ПО автоматически отрисовывает изображение на другом физическом разрешении.
  3. Добрый день Знаю, что с ноября в Google Play можно обновлять приложения только для TargetSDK не ниже 26. Но до этого момента этой функцией я не пользовался, оставляя в Манифесте все по дефолту, то есть и minSDK и targetSDK равны 14. Понятно, что от этого никуда не уйти, но в связи с этим меня больше всего интересует вопрос, если я обновлю приложение с targetSDK равным 26 или 27, смогут ли это приложение установить новые пользователи? При загрузке версии в Google Play появляется предупреждение, но из него ответ конкретно на мой вопрос не ясен. На данный момент около 25% пользователей, ежедневно устанавливающих данное приложение, имеют SDK 22 (Android 5.1) и ниже. И меня интересует, смогут ли такие пользователи устанавливать версию приложения, если я обновлю его до targetSDK 26 или 27? И также, есть ли разница, если выставить targetSDK 26 или 27? P.S. В данном приложении не используются никакие разрешения. Только доступ в интернет
  4. Alex7wrt

    Реализовать рейтинг

    Да все норм. Мне самому рисунок не очень понравился )) Рисовал его в ворде года два назад, когда хотел понять, как удобнее рисовать звезду. Когда понял, то рисунок уже не было смысла доводить до ума, так что таким он и остался. Но вот щас все-таки решил доделать. Исправил изображение )
  5. Alex7wrt

    Реализовать рейтинг

    Не приходилось )) Это рисунок звезды вызывает такие ассоциации? )
  6. Alex7wrt

    Реализовать рейтинг

    Надеюсь, что в предыдущем посте помог ответить на первую часть вопроса. Если каждая звезда организована отдельным компонентом, то, соответственно, вы всегда можете узнать по какой звезде был клик и раскрасить все звезды до нее (включительно) в желтый цвет. Ниже скинул программку для герерации TPathData звезды, может пригодится star generator.zip Можно использовать генерируемую строку TPathData, или использовать код procedure star; var i: byte; a1,a2: single; begin Path.Clear; Path.MoveTo(PointF(0,-r)); a1:=Pi/5-Pi/2; a2:=-Pi/2; for i:=1 to 5 do begin Path.LineTo(PointF((r*cos(Pi/5)-d)*cos(a1+(i-1)*2*Pi/5),(r*cos(Pi/5)-d)*sin(a1+(i-1)*2*Pi/5))); Path.LineTo(PointF(r*cos(i*2*Pi/5+a2),r*sin(i*2*Pi/5+a2))); end; Path.ClosePath; path.Translate(r*cos(Pi/10),r); end; Где R - радиус описанной окружности вокруг звезды. В програме он равен 100. d - Разность радиусов внешней и внутренней окружности согласно рисунка
  7. Alex7wrt

    Реализовать рейтинг

    Не совсем понял, какой рейтинг имеется ввиду. Внутренний рейтинг в приложении? Добавить 5 переменных целочисленного типа, которые будут хранить количество выставленных оценок от 1 до 5. С помощью TPathData нарисовать звезду. Создать 5 компонентов TPath и в обработчике OnTap или OnClick каждого увеличивать соответствующую переменную на единицу. И для оценки рейтинга вычислять среднее арифметическое: (a1 + a2*2 + a3*3 + a4*4 + a5*5)/(a1 +a2 +a3 + a4 + a5)
  8. Спасибо за ответ. Правильно ли я вас понял, что ваши приложения с TargetSDK 26 именно устанавливают новые пользователи с Android 5.1 и ниже, а не обновляют уже установленное приложение? И как насчет TargetSDK 26 или 27 - будет ли разница в этом плане?
  9. Такого обработчика нет. Можете написать аналогично обработчику OnResize в FMX.Controls.pas. Для этого в тех методах, которые вызывают изменение положения контрола, нужно проставить соответствующие маркеры, чтобы менять значение свойства типа: property OnChangePosition: TNotifyEvent read FOnChangePosition write FOnChangePosition;
  10. Уточнение: после обновления до MIUI 10 снова появилась черная полоса снизу. При этом в сторонних приложениях ее не наблюдалось. Следовательно, приведенное выше решение неполноценно. Решение: добавить строку android:resizeableActivity="true" в секцию Activity <?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%"> <%application-meta-data%> <%services%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:resizeableActivity="true" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <meta-data android:name="android.max_aspect" android:value="2.1" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <%activity%> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) -->
  11. Так происходит потому что вы делаете проверку с помощью ShowMessage. При этом панель теряет фокус и любое движение мыши над ней снова вызывает OnMouseEnter. Проверяйте так: добавьте на форму компонент TText и в обработчике панели OnMouseEnter напишите: text1.Text:=text1.Text+#13+'asdasd'; Вы увидите, что событие срабатывает корректно
  12. Ответил в личку, так как это уже другая тема
  13. Да. Вот мой манифест: <?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%"> <%application-meta-data%> <%services%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <meta-data android:name="android.max_aspect" android:value="2.1" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <%activity%> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) -->
  14. Хм... Создал пустой проект, добавил эту строку - приложение на весь экран,убрал строку - чёрная полоса снизу. Пока не пойму,почему у вас не получается
  15. Файлы проекта находятся в той же папке, что и AndroidManifest.template.xml?
  16. Для того, чтобы работало "из коробки", добавьте в файле манифеста в секции Activity строку: <meta-data android:name="android.max_aspect" android:value="2.1" /> Где 2.1 -максимальное соотношение сторон, поддерживаемое приложением. Можно заменить другим числом
  17. У меня была похожая ситуация с Redmi 5 и Redmi Note 5 Попробуйте зайти на телефоне в Настройки - > Безграничный экран - > Полноэкранный режим, и активировать полноэкранный режим для этого приложения
  18. Alex7wrt

    ListView, сброс SearchBox

    Добрый день Использую ListView.SearchBox для фильтра текста итемов. При первом использовании все норм. Но если после первого использования заменить тексты итемов, то поиск работает уже некорректно, то есть не находит итемы, которые содержат вводимый в SearchBox текст. Что нужно сделать, чтобы после замены текстов у итемов в ListView поиск через SearchBox всегда работал корректно? Может быть, какой-то сброс или что-то типа того? Заранее спасибо Rad Studio 10.1.2
  19. На Xiaomi "Now" выдает правильное время. Посмотрите в настройках телефона параметр "Регион"
  20. Всем здравствуйте! Необходимо отлавливать событие, когда музыкальный трек заканивает воспроизведение (причем, определять нужно точно). В медиаплеере такого события не нашел. Все, что придумал - это в таймере с маленьким интервалом (10-50 мс) выполнять проверку TMediaplayer.State = TMediaState.Stopped, но это довольно ресурсоемко, и все равно интервал великоват. Есть ли способ сделать так, чтобы по окончанию воспроизведения трека генерировалось это событие? Или есть ли нересурсоемкий способ зациклить воспроизведение трека с минимальной задержкой между циклами?
  21. Alex7wrt

    System.Net.Socket.TSocket

    Используйте TCPServer/TCPClient Для отправки по TCP. Там принцип работы тот же, многие методы/свойства идентичны. У меня все работает на всех платформах Прием данных в TCPServer делайте в OnExecute. В TCPClient для приема используйте поток: procedure TTCPConnectThread.Execute; begin while not Terminated do begin try if TCPClient.Connected then begin //Здесь считываем данные, например с помощью TCPClient.IOHandler.ReadLn, и обрабатываем их end; finally sleep(100); end; end; end;
  22. Уважаемый X11, пожалуйста, не вводите людей в заблуждение. По теме обязательного использования последних API на форуме уже есть несколько тем. С августа разрешена публикация новых приложений только с API не ниже 26 (Android 8.0), а с ноября для обновлений. Для того, чтобы приложение соответствовало новым требованиям, в файле мвнифеста нужно поменять параметр TargetSDKVersion на 26 или выше. Google никого банить не будет. Приложение просто не пропустят на публикацию. Уже сейчас при размещении в Google Play приложения с более ранней версией SDK, появляется предупреждение, что скоро публиковать можно только с SDK 26 и выше. Существующие же приложения никто трогать не будет.
  23. Alex7wrt

    PopUp и Canvas

    Можете сами рисовать PopUp на той же канве. Любой формы, цвета и т.д. По событиям мыши переприсваивать булевы переменные показать/скрыть PopUp, по координатам курсора определять над каким Item находится курсор мыши и т.д. Да, это более длинный подход, зато более универсальный.