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

Anatoliy

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

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

  • Посещение

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

  1. Like
    Anatoliy отреагировална Brovin Yaroslav в [Mobile] Почему в мобильных приложениях высота TGroupBox не меняется?   
    Добрый день,
     
    Смотрите ответ в теме только на примере TProgressBar, это руководство подходит для всех аналогичных ситуаций: [Android] Не получается увеличить высоту TProgressBar
  2. Like
    Anatoliy отреагировална Alexander в TGroupbox и TRadioButton вместо TRadioGroup   
    Как вариант могу предложить следующий алгоритм 
    В RadioButton(I).Tag выставляете уникальный индекс. В обработчике onChange у RadioButton:
    GroupBox.Tag := (Sender as TRadioButton). Tag;
    Тогда для проверки можно использовать :
    Case GroupBox.Tag of....
  3. Thanks
    Anatoliy отреагировална 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 - Разность радиусов внешней и внутренней окружности согласно рисунка

     
     
  4. Like
    Anatoliy отреагировална Alex7wrt в Реализовать рейтинг   
    Не совсем понял, какой рейтинг имеется ввиду. Внутренний рейтинг в приложении?
    Добавить 5 переменных целочисленного типа, которые будут хранить количество выставленных оценок от 1 до 5.
    С помощью TPathData нарисовать звезду.
    Создать 5 компонентов TPath и в обработчике OnTap или OnClick каждого увеличивать соответствующую переменную на единицу. И для оценки рейтинга вычислять среднее арифметическое: (a1 + a2*2 + a3*3 + a4*4 + a5*5)/(a1 +a2 +a3 + a4 + a5)
  5. Thanks
    Anatoliy отреагировална FREEFAR в Реализовать рейтинг   
    FMXComponent
    там есть TFMXRating...
    можно так
  6. Like
    Anatoliy отреагировална Barbanel в Элементы стиля на Андроид   
    1) Было что-то не так со стилем. Удалил из стилей все элементы, кроме двух простейших прямоугольников для background. После этого ошибка более не проявлялась.
    2) Убедился что стиль для андроида доступен на устройстве, и нужные объекты присутствуют.
    Действительно, под Андроид данный код не работает, и стили здесь ни при чем.
    Что характерно, форма не обновляется, если ей присвоить новый стиль в рантайме. Внешний вид формы остается прежним.
    Если вместо формы использовать например панель - стиль меняется.
    Изменить цвет заливки конкретно в ресурсе у меня не удалось.
    Это работает стандартным образом:
    AObject := Panel1.FindStyleResource('backgroundrect'); if (AObject is TRectangle) then TRectangle(AObject).Fill.Color := TAlphaColorRec.Yellow; Если позарез нужно менять стиль формы в рантайме - положите на нее панель с align=alClient, и меняйте стиль панели.
    Попробуйте, может вас устроит такой способ.
    И да, расскажите, для чего вы меняете цвет именно в ресурсе, а не в примененном стиле объекта.
    Мне правда интересен такой кейс.
  7. Like
    Anatoliy получил реакцию от Александр Жевлаков в Политика конфиденциальности   
    Ух... БОЛЬШОЕ ВСЕМ СПАСИБО. Залил в консоль приложение для получения пушей без GET_ACCOUNTS, заодно убрал READ_PHONE_STATE. Без READ_PHONE_STATE пуши приходят нормально... Приложение готово к публикации. Сейчас опубликую - получу отказ от гугла, и буду высылать им разрешающий документ...
    Со стороны выглядит полным маразмом... Неужели в консоли не могли предусмотреть раздел где можно было бы сразу перед публикацией прикрепить разрешающий документ? Очень странно это все выглядит у гугла, представляю что твориться в магазине apple - две мега корпорации для разработчиков - все для людей...
    P.S.
    Автору форума - памятник при жизни! Спасибо.
  8. Like
    Anatoliy отреагировална Brovin Yaroslav в Мерцание при запуски на Android ниже 7 версии   
    Не думаю, что удастся победить данный эффект. Поскольку мерцание связано с тем, что андроид не сразу выдает графический контекст, а делает это несколько раз. На каждое изменение контекста, FMX пересоздает свой контекст и выполняет инициализацию и иногда отрисовку. Именно по этому вы и наблюдаете этот эффект.
  9. Like
    Anatoliy отреагировална WebPuper в Переход на новую модель разрешений   
    Если кому-то потребуется, то код для C++, как я сделал
    _di_JActivity activity = TAndroidHelper::Activity; TJavaObjectArray__1<_di_JString> *Recipients = new TJavaObjectArray__1<_di_JString>(1); Recipients->Items[0] = StringToJString("android.permission.READ_EXTERNAL_STORAGE"); Recipients->Items[1] = StringToJString("android.permission.WRITE_EXTERNAL_STORAGE"); activity->requestPermissions(Recipients,0);  
  10. Like
    Anatoliy отреагировална ENERGY в TWebBrowser. Убрать горизонтальный скрол, убрать вертикальный скрол   
    Скорее всего не получиться сделать скриншот, т.к. это нативный компонент и MakeScreenshot тут вернет белый фон. 
    Чтобы убрать горизонтальную прокрутку, наверное нужно копать в сторону CSS, и искать как адаптировать страницу под ширину сайта без скрола..
    В том то и дело что его не достанешь так просто, т.к. скрол бар в нативном компоненте.
  11. Like
    Anatoliy отреагировална Tumaso в Переход на новую модель разрешений   
    @Alex7wrt,
    устанавливают в том числе и новые пользователи на старых версиях андроида, и у них работает. minSdkVersion для этого.
    Что касается targetSDK, то этим значением приложение уведомляет операционку, что возможно будет использовать api вплоть до данной версии. targetSDK 27 пока не использовал, только 26, и все что надо работает.
    В самом коде делаю анализ текущей версии SDK, и в зависимости от нее возможно делаю дополнительные действия. Вот например, работа с правами:
    {$IFDEF ANDROID} // для Android 6+ требуется дополнительная работа с правами if TJBuild_VERSION.JavaClass.SDK_INT >= 23 then begin if (TAndroidHelper.context.checkSelfPermission( StringToJString(PERMISSION_FILE_READ) ) = TJPackageManager.JavaClass.PERMISSION_DENIED) or (TAndroidHelper.context.checkSelfPermission( StringToJString(PERMISSION_FILE_WRITE) ) = TJPackageManager.JavaClass.PERMISSION_DENIED) then begin // необходимо запросить разрешение на использование галереи LIsWaitPermissions := True; TAndroidHelper.Activity.requestPermissions( CreateJavaStringArray([PERMISSION_FILE_READ, PERMISSION_FILE_WRITE]), BUTTON_FILE ); end; end; {$ENDIF}  
  12. Like
    Anatoliy отреагировална Tumaso в Переход на новую модель разрешений   
    @Alex7wrt,
    конечно смогут. Минимально допустимая версия указывается в minSdkVersion. У меня например во всех приложениях установлено <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="26" />
  13. Like
    Anatoliy отреагировална Alex7wrt в Переход на новую модель разрешений   
    Добрый день
    Знаю, что с ноября в 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. В данном приложении не используются никакие разрешения. Только доступ в интернет
  14. Like
    Anatoliy отреагировална Евгений Корепов в Сборка приложений под Linux   
    Проблему решил. Сам дурак. Прописал в iptables разрешающее правило - все заработало. 
  15. Like
    Anatoliy отреагировална Tumaso в Разрешения для приложения не вступают в силу на Android   
    У делфи большой плюс - кроссплатформенность.  У меня реально 90% единого кода для виндов, андроида и иоса. Специфичного для каждой платформы не так и много, по большому счету.
    Писать отдельно в андроид студии, отдельно в xcode, отдельно в делфи с VCL реально не очень хочется Заказчикам то пофиг, они хотят как минимум мобильные приложения сразу и для андроида и для иоса.
  16. Like
    Anatoliy отреагировална ENERGY в переходпо ссылке с push уведомления   
    Никак, даже в нативном swift, при тапе на уведомление, сначала запускается\активируется программа, а затем уже оттуда нужно вызвать ссылку и закрыть\скрыть программу.
    Вы же для iOS пишите? 
  17. Like
    Anatoliy отреагировална Barbanel в переходпо ссылке с push уведомления   
    Правильно ли я понимаю: вы пишете некое приложение, которое показывает пользователю веб-ссылку в уведомлении?
    Имхо: нельзя переходить на внешний ресурс, тапнув на ссылку в уведомлении.
    Всегда сначала нужно показать вашу программу, при этом в зависимости от логики программы - показать что именно пришло (чтобы пользователь мог понять полезное ли для него это сообщение), и только потом давать возможность переходить по внешним ссылкам.
  18. Like
    Anatoliy отреагировална Brovin Yaroslav в Встреча в Питере 11-го октября 2018   
    Я буду, как обычно. На встрече дам попробовать демки, сделанные с библиотекой FGX Native.
  19. Like
    Anatoliy отреагировална Vitaldj в Встреча в Питере 11-го октября 2018   
    Уважаемые коллеги, 11-го октября 2018 года, в славном городе Санкт-Петербурге состоится встреча ценителей FMX и нашего любимого форума fire-monkey.ru. Встреча будет ближе к 19-00, место, предварительно «чердак» в районе Авроры. Кто точно знает, что появится, отпишитесь!
  20. Like
    Anatoliy отреагировална Евгений Корепов в Разрешения для приложения не вступают в силу на Android   
    На последних версиях андроида вы должны спрашивать разрешение у пользователя перед операцией требующей прав.
  21. Like
    Anatoliy отреагировална ENERGY в Освобождение памяти TListViewItem   
    У меня как раз так - на каждый введеный символ TEdit, я делаю Clear и заполняю снова с другими результатами. И деструктор вызывается каждый раз. Возможно в Берлине до обновлений было по другому..
     
  22. Like
    Anatoliy отреагировална gonzales в Рабочая комбинация программ для публикации в AppStore   
    В связи с требованием Apple выкладывать в AppStore программы с SDK не ниже 11.0 опять возникла необходимость использовать XCode выше 8.2.
    По итогу все срослось, конфигурация такая
    Delphi 10.1 Up2
    Xcode 9.2
    SDK 11.2
    Для того, чтобы все компилилось необходимо сделать две вещи.
    1. В SDK добавить FileProvider
    2. В XCode добавить PackageApplication (https://stackoverflow.com/questions/43068608/xcrun-error-unable-to-find-utility-packageapplication-not-a-developer-tool)
  23. Like
    Anatoliy отреагировална ENERGY в Открыть для чтения pdf файл. Android   
    {$IFDEF ANDROID} Uses Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net; {$ENDIF} procedure btnPdfClick(Sender: TObject); var lName : String; {$IFDEF ANDROID} Intent : JIntent; URI : Jnet_Uri; {$ENDIF} begin lName := TPath.GetSharedDownloadsPath + PathDelim + 'test.pdf'; {$IFDEF ANDROID} URI := TJnet_Uri.JavaClass.parse(StringToJString('file:///' + lName)); intent := TJIntent.Create; intent.setAction(TJIntent.JavaClass.ACTION_VIEW); intent.setDataAndType(URI,StringToJString('application/pdf')); SharedActivity.startActivity(intent); {$ENDIF} end;  
  24. Like
    Anatoliy отреагировална Равиль Зарипов (ZuBy) в Освобождение памяти TListViewItem   
    В Берлине и ниже метод Clear не чистил за собой и правильно будет чистить циклом как в примере выше
    Это справедливо только когда данные в ЛВ перезаполняются
  25. Like
    Anatoliy отреагировална ENERGY в Освобождение памяти TListViewItem   
    Это неверно. Все TListViewItem корректно уничтожаются и освобождаются в Clear.
    Чтобы это проверить, достаточно поставить точку останова на TListItem.Destroy;
    А предложенный вами код это очень не оптимизированное и медленное решение, с перерассчетом всех индексов при каждом удалении айтема.
×
×
  • Создать...