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

ENERGY

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

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

  • Посещение

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

    57

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

  1. Вы смотрели этот пример из папки Samples? C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Mobile Snippets\AccessCameraApp\AccessCameraApp.dproj
  2. krapotkin В моем случае это явно будет лишнее. Часть времени потратить на отрисовку анимации. Там всего то 1 - 2 секунды. И кстати для отображения этого компонента, придется делать все тоже самое, что и для отображения лэйбла.
  3. В общем я решил так сделать. На пустой таб странице, на которой в будущем будет лежать фрейм кинул Ttext с надписью Loading . Дальше делаю так: TabControl.SetActiveTabWithTransition - загружаю с анимацей пустую страницу (на нее потом будет положен фрэйм) с надписью Loading - т.е. отодвигается текущая страница и загружается пустая. Application.ProcessMessages; - это для того чтобы была анимация MyFrame.Parent := tiFrameTab; - загружаю на табстраницу мой фрейм. Application.ProcessMessages; - нужно еще раз, чтобы установился размер высоты заголовков из стиля listboxgroupheader (иначе он не ставиться сам в этом случае)
  4. Спасибо за ответ! Если перед вызовом TabControl.SetActiveTabWithTransition добавить PreloadContent(MyFrame); - то все также тормозит. Но если добавить после PreloadContent строчку Application.ProcessMessages; - то тогда анимация не тормозит. НО, там пауза около 2 секунд, получается юзер тапнул на Item и ждет 2 секунды пока фрэйм подгрузится... Наверное сделаю вообще без анимации. На компе не тормозит, тормозит только на телефоне..
  5. Программа имеет большое кол. элементов интерфейса и много экранов. Поэтому я сделал такую вещь - Таб контрол, на котором лежит часть постоянно загружаемого интерфейса, и одна закладка (tabPage) куда загружаются фреймы - там лежат редко используемые экраны, т.е. фрэйм создаю в runtime, ставлю фрэйму MyFrame.Parent := FrameTabPage и показываю этот таб кодом TabControl.SetActiveTabWithTransition Юзер ушел с этой страницы я убираю фрейм кодом MyFrame.Parent := nil Все работает, но проблема в том что это сильно подтормаживает систему - в результате анимация Slide таба двигается рывками. Тормозит на этапе MyFrame.Parent := FrameTabPage, т.е. даже если я создам фрейм на этапе старта программы, то все равно будет тормозить на этом этапе MyFrame.Parent := FrameTabPage (видимо подгоняются размеры, на фрейме лежит ListBox с контролами ). . Если Parent фрэйма заранее поставить на нужный TabPage, то ничего не тормозит, но программа грузится дольше. Посоветуйте пожалуйста что можно тут придумать, ведь кто-то использует фреймы..
  6. Кривяков Виталий Спасибо за важную инфу. Я надеюсь корректор вы запускаете только когда это необходимо - только когда видите визуально что TPath не справился в Design Time или, в случае если загружаете TPath в Runtime, - когда он отвалился с определенным исключением. Иначе это пустая растрата ресурсов на и так слабеньких моб. процах\аккумуляторах.
  7. Error Все не так трагично, как вы описываете. Я проверял на Android 4.3, загрузил пару больших path с кучей деталей (картинка с наушниками и дерево из статьи), каких то артефактов не увидел, да сглаживания нет, но это настолько незаметно, что я бы даже не догадался присматриваться. И все равно это будет выглядит лучше чем если брать растровую картинку. Дальше, размер векторных данных картинки с наушниками - 484 килобайта. И картинка с наушниками грузиться ~ 2 секунд. И это на довольно слабеньком телефоне. А картинка с деревом появляется мгновенно (41 кб).. delphi 1Berlin 10 upd 2
  8. Как конвертировать растровую картинку в векторный TPath Firemonkey. How to convert a bitmap image (png, jpeg, bmp) into a Firemonkey vector TPath. Manual. Плюсы векторных изображений: Можно изменять размер избражения в любую сторону, уменьшать и увеличивать, без потери качества. Картинка всегда будет с четкими краями, без размытия по краям и квадратиков. Можно легко изменять в RunTime цвет заливки и обводной рамки, изменяя цвета в полях Fill и Stroke компонента TPath. Заливка как правило одна - это цвет из свойства Fill Color. Но ... цвет может быть и градиентом из множества цветов, который можно указать в диспетчере объектов, там же можно загрузить и Bitmap как текстуру в качестве заливки. Можно анимировать изображение, изменяя вышеуказанные свойства, а также направление градиента, размер, толщину обводной линии итд. Тоже можно менять и для Stroke свойства - обводной рамки. Минусы: Получаемое изображение упрощенное. Т.к. оно может содержать только один путь (Path) и одну плоскость. Возможно получиться скомбинировать множества TPath, положив их друг на друга с прозрачностью. Векторное изображение вычисляется и рисуется "в живую", поэтому потребуется больше ресурсов, чем при отрисовке обычных растровых картинок png, jpg, bitmap. Что означает нагрузку на аппаратную часть, замедление работы программы и более быструю разрядку мобильного устройства. Поэтому если и использовать подобные векторные изображения, то в случае если нужно отобразить большие картинки-символы на разных экранах (не иконки) - например на маленьком экране телефона, и на большом планшете и на еще большем Desktop экране. Хотя в примере \Samples\Object Pascal\Multi-Device Samples\User Interface\CustomListBox\CustomListBox.dproj используется векторная иконка\чекбокс очень простая. Преимущества векторного изображения наглядно: Ингредиенты: 1. Векторный редактор, я взял бесплатный inkscape, который можно скачать здесь . 2. Картинка. Желательно чтобы картинка была с большим разрешением, от 300px и больше. Если взять изображение маленького размера, например 48x48 или 64x64, то контуры получатся не такими точными. И хотя inkscape все равно применит сглаживание контуров, и квадратиков вы не увидите, обводные линии могут получиться другой формы, к примеру более жирными или могут слиться с другими линиями. Исходное изображение лучше брать в формате PNG, т.к. JPEG оставляет артефакты в виде точек, в итоге программа при трассировке может захватить и их, что не желательно. Конечно же если другого исходника нету, то смысла конвертировать jpg в png нет - качество не улучшится. Основной метод конвертации - это трассировка изображения, - когда алгоритм ищет края и обводные линии, и на основе их рисует свои. Потому качественные результаты получаться если брать изображение с одной плоскостью, без теней, градиентов и деталей, в стиле Windows 8\10 или Android. Т.н. Flat (плоский) icon. 3. IDE RAD Studio Delphi или С++ Приступим. Запускаем incscape. Размер исходной png картинки 668x720. 1. Меню File > Open - указываем путь. Иконка загрузилась. 2. Нажимаем левой кнопкой мыши на картинку, чтобы она выделилась. 3. Меню Path > Trace Bitmap. Сразу выберите чекбокс Live Preview (см скриншот). Здесь есть разные методы, но нам нужна секция Single Scan: Creates a Path. Методы нужно подбирать визуально, "на глаз". Можно также использовать и секцию Multiply Scans, а затем скомбинировать пути в один (Path > Combine), т.к. нам нужен один путь, и один набор. Путь (Path) это набор инструкций о том как и сколько рисовать линий-векторов. Для нашего конкретного случая, этой конкретной иконки, оптимальный вариант Color Quantization и количество цветов = 2. 4. Нажимаем OK и закрываем окно. Появилось наше изображение залитое черным цветом - это и есть наша векторная картинка. Стоит заметить что прямо под ним лежит наше исходного изображение. Чтобы его удалить нужно отодвинуть мышкой векторное изображение, выделить исходную картинку и удалить ее клавишей Delete. 5. Вы можете отредактировать пути, выбрав в левой панели инструмент Edit Paths By nodes (F2) или добавить фильтры\эффекты в меню Path > Path Effects. В данном примере я ничего не менял. 6. File Save As > inkscape SVG . 7. Открываем полученный SVG файл в блокноте или в Lister тотал коммандера. Ищем массив чисел, который обычно начинается со строчки "<path". Находим эту строчку, нам нужно набор символов, который идет после буквы "d=", к примеру d="m 397.33334,c -48.1 ...-0.326 -1.64129,-0.66405 z" и копируем все, что внутри кавычек в буфер. 8. Далее в RAD IDE кидаем на форму TPath. В Object Inspector WrapMode устанавливаем в Fit, и в поле Data вставляем из буфера наш код. 9. Меняем Fill и Stroke цвета на нужные нам значения (здесь я установил желтый цвет и увеличил толщину обводки (Stroke)). Еще пару примеров. Дерево - параметры Brightness Cutoff, Threshold 0.370 . Как видите здесь оптимальнее подходит метод Brightness Cutoff. Здесь исходная png картинка - это дерево черного цвета, я ее распознал, и затем добавил в TPath, а в свойстве Fill указал градиент от черного до зеленого. Наушники - Edge Detection 0. Конечно конкретно в этом случае нужно подчищать изображение. Иногда бывает что при вставке пути в TPath, компонент его отображает некорректно, если снова зайти в DATA TPath, то окажется что часть данных потеряна. Что исправить эту ситуацию, нужно путь упростить. Это значит что после шага 4, нужно выбрать в incscrape меню Path > Simplify, затем снова сохранить файл. Правда Simplify в incscrape работает не очень хорошо, часто загругляет прямые участки. Лучше делать Simplify в Adobe Illustrator. Статья опубликована на сайте fire-monkey.ru и возможно будет изменяться и дополняться. Автор: ENRGY 24. 02. 17
  9. Error Да и без сглаживания это выглядит гораздо лучше чем растровые. Я не замечал там каких то заметных несглаженных искажений. К тому же можно приготовить в редакторе smooth картинку, скомбинировав ее из нескольких путей (слоев) и она будет вполне себе сглаженной . Да кстати, напишите то же самое разработчикам Windows. У них ужасное форсированное масштабирование на Win 8-10 для всех окон. Да оно сглаженное, но такое размытое, как будто сидишь с близорукостью.. Вот пример как не нужно сглаживать. Хорошо хоть эту "фичу" отключить можно, и то не везде.
  10. Хорошая задумка, только уже ведь есть TimageList. C довольно неплохой идеей. А вообще хотелось бы векторный TImageList, куда можно загрузить список TPath
  11. Т.е. звонит будильник и человек останавливает и откладывает его на 10 мин? Нужно автозапускать свое Activity как расписано в этой статье и просто устанавливать новый интервал в AlarmManager. Кстати, начиная с XE7 вместо генерации Dex и подмены classes.dex можно просто подключить Jar файл. Надеюсь Ярослав осветит это в своей статье (заодно там bat файл нужно обновить, он не работает на новых версиях java).
  12. Большое спасибо что поддерживаете статьи в актуальном состоянии! Я также часто ссылаюсь на ваши статьи на других сайтах - англоязычных. Что удивительно подобная информация редко вcтречается на англоязычных сайтах, к примеру про Alarm Manager и Delphi нет ни одной статьи, даже на сайте Embarcadero этот вопрос долгое время висел без ответа, пока я не дал ссылку на вашу статью. Непопулярность Delphi Mobile как раз и связана с тем, кроме цены, что на многие вопросы почти нет ответов, при этом Java сообщество пестрит готовыми Copy Paste решениями, что увеличивает и без того большую армию пользователей. Но Java нет на iOS. И на Java не сделаешь кроссплатформенный проект с единым кодом и GUI, поэтому Delphi здесь на шаг впереди. Поэтому мне и показалось важным указать на ньюанс с JAR в темах связанными с DEX (заодно кстати и осветили баг с батником, помните javac -source 1.7 -target 1.7? - ведь на этом этапе у человека изучающего Delphi может пропасть желание изучать дальше), столько плясок с бубном с этим dex, и разбросать чтобы больше людей увидели более удобный и простой вариант.
  13. Привет. Я тут узнал что оказывается начиная с XE7 не нужно создавать Dex файл затем подменять его на classes.dex. Достаточно создать Jar файл и подключить его к проекту. А Dex файлы нужны для XE5 и XE6. Узнал я это из этого вопроса на stackoverflow. Пожалуйста Вы не могли бы обновить статью? Просто дописав эту заметку? На мой взгляд это важно. Я также обновил бат файл, он будет примерно такой: @echo off setlocal if x%ANDROID% == x set ANDROID=c:\Users\Alex\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows set ANDROID_PLATFORM=%ANDROID%\platforms\android-24 set PROJ_DIR=%CD% set VERBOSE=0 echo. echo Compiling the Java service activity source files echo. mkdir output 2> nul mkdir output\classes 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=-verbose javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\TestReceiver\AlarmReceiver.java echo. echo Creating jar containing the new classes echo. mkdir output\jar 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=v jar c%VERBOSE_FLAG%f output\jar\test_classes.jar -C output\classes com echo. echo Now we have the end result, in directory output\jar\ pause
  14. Привет. Я тут узнал что оказывается начиная с XE7 не нужно создавать Dex файл затем подменять его на classes.dex. Достаточно создать Jar файл и подключить его к проекту. Я проверил на новом проекте - все прекрасно работает. Проект автозапускается из AlarmManager (делал на основе этой статьи ) .А Dex файлы нужны для XE5 и XE6. Узнал я это из этого вопроса на stackoverflow. Пожалуйста Вы не могли бы обновить статью? Просто дописав эту заметку? На мой взгляд это важно. Я также обновил бат файл, он будет примерно такой: @echo off setlocal if x%ANDROID% == x set ANDROID=c:\Users\Alex\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows set ANDROID_PLATFORM=%ANDROID%\platforms\android-24 set PROJ_DIR=%CD% set VERBOSE=0 echo. echo Compiling the Java service activity source files echo. mkdir output 2> nul mkdir output\classes 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=-verbose javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\TestReceiver\AlarmReceiver.java echo. echo Creating jar containing the new classes echo. mkdir output\jar 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=v jar c%VERBOSE_FLAG%f output\jar\test_classes.jar -C output\classes com echo. echo Now we have the end result, in directory output\jar\ pause Также еще один ньюанс. Для варианта 2 никакой Dex файл не нужен. Также не нужен и Jar файл. Также ничего не нужно в манифест добавлять, т.к. вызывается activity напрямую, без BroadcastReceiver.Но это только для варианта 2. Для первого варианта (Broadcast) все это нужно.Я проверял на новом проекте с вариантом 2 - все работает.
  15. Тот же вопрос на http://stackoverflow.com/questions/42368123/how-to-pass-boolean-or-integer-to-intent-and-read-it-to-detect-that-my-activi Никакие свои аргументы добавлять из Java кода (putExtra) не нужно. Решение использовать счетчик EXTRA_ALARM_COUNT: uses Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; ... var Intent: JIntent; ... Intent := TAndroidHelper.Activity.getIntent; if Intent.getIntExtra(TJIntent.JavaClass.EXTRA_ALARM_COUNT, 0) > 0 then lblInfo.Text := 'Started by Alarm Manager through FMX Activity'; И насчет отправки аргумента при помощи putExtra из Java кода, все работает, просто я протупил, и регистрировал вызов своего активити напрямую (без Broadcast receiver), из примера номер 2 из из этой статьи . Кстати заодно я узнал что могу вместо Dex подключить Jar файл (начиная с XE7!), и это тоже работает, и гораздо проще! И кстати для примера номер 2 из той статьи (вызов активити напрямую - не нужен ни Dex файл, ни Jar ни манифест). Проверял на новом проекте.
  16. Andrey Efimov Там еще нужно все пути скомбинировать в один путь, плюс если путь сложный - он будет неправильно отображен (Tpath срежет часть данных), нужно его упростить (Simplify) krapotkin Плюс векторных иконок в том, что они масштабируются без квадратиков и размытия. Остаются четкими всегда при любом размере. Хотя согласен иконки лучше оставить в png, но какие то символические картинки большого размера, имхо лучше в векторе. Еще один плюс, цвет заливки и рамки можно менять в RunTime - иконки могут быть любого цвета, всего лишь указать Fill Color и Stroke Color. А ведь еще можно и анимацию сделать.
  17. Ребята я разобрался! Как конвертировать любую картинку в формат TPath для FMX. Результат - см. png скриншот . Завтра или послезавтра напишу статью. Нужна прога inkscape, и кое какие манипуляции. Пример для автора - векторный прямоугольник с дырой посередине:
  18. 1. Я вот нашел костыльное решение - делаем SVG в каком то векторном редакторе, сохраняем его в svg и затем грузим на этот сайт https://petercollingridge.appspot.com/svg-editor . Дальше выбираем Edit (experimеntal) и уже эти циферки можно копировать в TPath - это будет работать, хотя это все не то. Нужно обвести иконку. 2. Возможный вариант номер 2 (не проверял еще). Adobe Illustrator http://lessons.livecode.com/m/33498/l/325452-getting-svg-path-data-for-svg-icon-extension Правда это громадный пакет. Может кто подскажет что получше.
  19. Во первых PixPower на немецком, а версии на английском нету. Я не с первой попытки открыл иконку, а уж что-то другое сделать и подавно не смогу - к примеру как показать эту панельку с SVG DATA.. Во вторых проект уже давно не развивается, последняя версия 2006 года. Я думал возможно кто-то подскажет более продвинутый редактор SVG.
  20. В смысле iAD Apple отключили что ли для новых приложений? Или только для Embarcadero разработчиков? Я что-то не найду нигде такой инфы.
  21. Самый простой вариант - нарисовать в обычном графическом редакторе нужный прямоугольник с дыркой и сохранить его в png. Сложный вариант копать сторону TPath - - по факту это SVG формат, векторная графика. Можно сделать вот как на видео (обвести иконки, создать path и закинуть SVG данные вTPath). Только вот я не знаю в какой программе это делать, если узнаете подскажите тоже в этой теме. http://www.webdelphi.ru/2012/04/firemonkey-2/
  22. Что то не пойму, почему Admob если для iOS это iAD. http://docwiki.embarcadero.com/RADStudio/XE6/en/Adding_Advertising_to_Your_Mobile_Apps http://docwiki.embarcadero.com/RADStudio/XE6/en/Adding_In-App_Payments_to_Your_Mobile_Apps http://blog.marcocantu.com/blog/2014_may_advertising_ios.html
  23. Кстати я тоже заметил проблему когда портятся картинки в TimageList . Проблема возникает когда часто пользуешься ImageList в Design Time. Стоит Berlin Update 2 На них возникают какие то артефакты, типа решетки, или муара. И все, она сохраняется такой в ImageList, и в следующие разы нужно заменять картинку полностью. Не знаю как это решить. Мне пришлось даже заменять некоторые иконки на совсем другие, к примеру на прикрепленной ниже иконке через время появляется решетка на синем фоне.
  24. Menkos1 Это код для уменьшения размера exe под Windows. Добавляшь в Dpr файл (Project > View Source), выбираешь Release в правой панели, затем Project > Build. Размер еще уменьшиться. Правда потом нужно протестировать программу. На VCL с этими директивами у меня проблем никогда не было, - в смысле каких то багов в программе. На FMX не пробовал (я FMX пока только под моб. девайсы использую)
×
×
  • Создать...