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

Barbanel

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

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

  • Посещение

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

    36

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

  1. Like
    Barbanel отреагировална WebPuper в Научите делать приложение для iOS   
    Спасибо за ответы, плюсую
  2. Like
    Barbanel отреагировална OnePeople в Crony Auto (Alpha)   
    Crony Auto - Лаунчер, целью которого является обеспечение удобства, целостности дизайна и обеспечение достаточного функционала для работы без использования стандартных приложений вашей Android магнитолы.
    Основные возможности:
    - Просмотр, запуск и удаление приложений
    - Прослушивание аудио с памяти устройства или плейлистов радио онлайн
    - Работа как в режиме воспроизведения с флешки, так и создание плейлистов
    - Просмотр погоды
    - Работа с OBD2 по Bluetooth
    - Виджет яндекс-навигации с указанием пути движения
    - Темы оформления
    Текущая версия: 0.4.0.402
    Ссылка на приложение: 4PDA
  3. Like
    Barbanel отреагировална Tumaso в Подсветка синтаксиса pascal на форуме   
    Ну почему же, начинают. Команда, в которой я сейчас работаю, начала ровно год назад новый проект именно на FMX для виндов и мака.
    И как говорится - почему бы и нет? Делфи достаточна хороша, всё можно делать быстро и хорошо)
  4. Like
    Barbanel отреагировална dnekrasov в HTML парсер для Firemonkey   
    как-то так
    uses System.RegularExpressions; ... const AHREF = '<a href="([^"]*)"[^>]*>([^<]*)</a>'; var Match: TMatch; s: String; begin Match := TRegEx.Match(ваша HTML строка, AHREF); while Match.Success do begin // здесь что-то делаем //<a href"...>...</a> в Match.Value //Match.Groups[1] - адрес ссылки //Match.Groups[2] - отображаемый текст ссылки Match := Match.NextMatch; end; end  
  5. Like
    Barbanel отреагировална Alex7wrt в 9-Patch PNG FMX Generator   
    Сделал небольшую программу-генератор 9-patch заставок. 
    Достаточно выбрать цвет фона, логотип и его видимый размер, и программа сгенерирует 9-patch для всех необходимых  в FMX размеров.

    Примеры
    Рисунок:

    Полученные 9-Patch png:

    Рисунок:

    Полученные 9-Patch png:

     
    Исходники: 9Patch Generator.zip
     
  6. Like
    Barbanel отреагировална Ingalime в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    Надо по той ссылке, что я выложила написать гневный комментарий Марко Кенту.
    А вам спасибо!!!
  7. Like
    Barbanel отреагировална IgorK11 в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    набросал подробную инструкцию как делал на 10.3 собрав инфу с комментариев:
    !!! Иконки в AppIcon.appiconset должны быть без прозрачности и альфа-канала, иначе получите ошибку ITMS-90717:Invalid App Store Icon.
    1. распаковываем iOS1024fix.zip
    2. заменяем иконки в asset_catalog\Assets.xcassets\AppIcon.appiconset\ и asset_catalog\Assets.xcassets\LaunchScreenImage.imageset\
    3. если надо меняем цвет фона в asset_catalog\Assets.xcassets\LaunchScreenBackgroundColor.colorset\Contents.json
    4. копируем папку asset_catalog на мак
    5. в терминале перейти в неё, если скопировали на рабочий стол команда:
    cd desktop/asset_catalog 6. выполняем команду:
    actool --output-format human-readable-text --notices --warnings --app-icon AppIcon --output-partial-info-plist compilation_results/partial_Info.plist --target-device iphone --target-device ipad --minimum-deployment-target 11.0 --platform iphoneos --product-type com.apple.product-type.application --compile "compilation_results" "Assets.xcassets" в asset_catalog\compilation_results появятся 4 файла
    7. копируем папку (или эти 4 файла) обратно c мака
    8. в delphi компилируем ipa (Release / iOS Device 64-bit / Application Store)
    9. Для удобства создадим папку "ios1024" в папке проекта
    10. копируем файл iOSDevice64\Release\<ИмяПроекта>.Info.plist в папку "ios1024" убрав из имени "<ИмяПроекта>.", имя файла должно быть "Info.plist", регистр важен!
    11. копируем из asset_catalog\compilation_results 4 файла в папку "ios1024"
    12. копируем папку LaunchScreen.storyboardc в "ios1024" (именно папку а не её содержимое)
    13. Редактируем Info.plist
    13.1. Меняем:
    <key>CFBundleIconFiles</key> <array> <string>ios_app_ico57</string> <string>ios_app_ico87</string> <string>ios_app_ico114</string> <string>ios_app_ico1024</string> <string>ios_app_ico60</string> <string>ios_app_ico120</string> <string>ios_app_ico180</string> <string>ios_spot_29</string> <string>ios_spot_40</string> <string>ios_spot_58</string> <string>ios_spot_80</string> <string>ios_spot_120</string> </array> на
    <key>CFBundleIcons</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> </array> <key>CFBundleIconName</key> <string>AppIcon</string> </dict> </dict> <key>CFBundleIcons~ipad</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> <string>AppIcon76x76</string> </array> <key>CFBundleIconName</key> <string>AppIcon</string> </dict> </dict> 13.2. Удаляем в двух местах строки:
    <key>CFBundleResourceSpecification</key> <string>ResourceRules.plist</string> 13.3. После строк:
    <key>DTPlatformName</key> <string>iphoneos</string> добавляем:
    <key>DTPlatformVersion</key> <string>13.5</string> 14. Заходим в delphi->Project->Deploment
    15. Проверяем что бы выбран "iOS Device 64-bit"
    16. Снимаем галочки с: (имена файлов будут ваши, ориентируйтесь по Option->Application->Icons)
    17. в Deploment добавляем все файлы папки "ios1024"
    18. изменяем Remote Path 5-и строкам:
    19. компилируем IPA и отправляем через Transporter на маке
    !!! При изменении версии билда в проекте не забываем изменить его в CFBundleVersion "ios1024"\Info.plist
     
    iOS1024fix.zip
  8. Like
    Barbanel получил реакцию от Андрей Рулин в Динамическое изменение массива записей   
    Большое количество - это сколько?
    100, 100 000, 100 000 000?
    Каждый раз увеличивая размер на один элемент, менеджер памяти ищет непрерывный незанятый кусок памяти такой длины, чтобы уместить все элементы. Хорошо если место под уже выделенный массив позволяет увеличить размер, не упираясь в участики памяти занятые другими данными.
    Иногда после очередного увеличения массива, уже выделенного участка памяти более не хватает. В таком случае менеджеру приходится искать новый, и копировать старые данные в новый участок памяти, а старый участок помечать как свободный.
    Разумеется это занимает время. Именно это и приводит к "не так быстро, как хотелось бы".
    Чтобы избежать этого:
    1 Способ курильщика, простой: Увеличиваем размер массива не на 1 элемент, а сразу на 16/32/128/1024 элемента (вам виднее, в зависимости от того сколько у вас может быть элементов в массиве). Также заводим счетчик - номер последнего занятого элемента в массиве, и после каждого добавления - увеличиваем этот счетчик на единицу. Этот способ не избавит от проблемы, но будет приводить к менее частому перераспределению памяти.
    2 Способ здорового человека, чуть сложнее: используйте указатели. Заведите массив указателей (либо TList), выделяйте место под каждую новую запись (ваш record) вручную, и помещайте указатель на него в ваш массив указателей (или в TList). Не забывайте освобождать выделенную память, когда ваши обьекты больше не нужны. Этот спобоб более правильный, так как в этом случае перераспределение происходит очень редко.
    Кстати, реализация TList использует внутри себя первый способ.
  9. Like
    Barbanel отреагировална mazayhin в REST Client Library vs. THTTPClient   
    THTTPClient - голый клиент, а в TREST... За вас сделана часть работы для работы по rest, и ну и преобразования результата в TDataSet. Внутри там тот же HttpClient
  10. Like
    Barbanel отреагировална Ingalime в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    https://community.idera.com/developer-tools/b/blog/posts/workaround-for-ios-appstore-1024x1024-icon-issue?fbclid=IwAR22IEFqfF7u6jgnL_CDsFOagHAJqItSeKsvG4DUUwPyGDZFB-nHreAxVZM
  11. Like
    Barbanel получил реакцию от Sergionn в Контора ищет FMX разработчика   
    Не соглашусь. Не обязательно третий мир, скорее как источник опытных кадров. У нас очень похожая ситуация:
    находимся в Германии, ищем Delphi разработчика, желательно с опытом fmx. Компания небольшая, поэтому гугловских зарплат не предлагаем.
    Из моего опыта, предлагаемая ЗП соответствует уровню миддл-разработчика. Важно понимать, что речь идет о начальной ЗП, которая пересматривается со временем.
    Людей просто нет. Не то чтобы им ЗП мала, их (людей) нет. Присылают резюме всякие индусы да турки-арабы-хзкто, это не тот контингенс с которыми мы готовы работать.
    В итоге плюнули, и везем людей из экс-ссср. На собеседовании тупых вопросов про люки не задавали. Выделили месяц-два для работы в удаленном режиме, чтобы посмотреть как человек справляется, какие вопросы задает, насколько вообще активен.
    После этого принимаем решение о релокации.

    PS, друг работает в Голландии, разрабатывают ПО для аэропортов.
    Его компания за пять лет привезла более тридцати русскоговорящих разработчиков.
    Имхо, это говорит о многом.
  12. Like
    Barbanel отреагировална slav_z в Контора ищет FMX разработчика   
    блин, рассмотрите мою кандидатуру....
  13. Like
    Barbanel получил реакцию от Ingalime в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)   
    Воу-воу, палехше, на личности не надо переходить. Для этого есть личка.
  14. Like
    Barbanel получил реакцию от Ingalime в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)   
    Разобрался, возможно проблема проявлялась только у меня.
    У меня установлен JCL и JVCL.
    Нужно было в меню Project -> JCL Debug Expert -> Generate .jdbg files выставить Enabled for this project (либо Always enabled)
    У меня было выставлено Always disabled, отладка не работала. В случае первых двух - отладка под Android64 работает.

  15. Like
    Barbanel отреагировална GASCHE в Книга. Обучение мобильной разработке не Delphi   
    Основной задачей второго издания данной книги является актуализация представленных примеров относительно текущей версии Embarcadero RAD Studio/Delphi 10.3.2 Rio по сравнению с той, которая использовалась при подготовки первого варианта. Материал книги дополнился новыми возможностями и полезными советами, а также рекомендациями, полученными от читателей первой версии.

  16. Like
    Barbanel отреагировална Vlad Dubov в Инструкция по установке набора компонентов FGX   
    Для тех, у кого  ошибка с dclfg.***bpl  "Design-Time пакет. Выдает ошибку: E2225 Never-build pakage 'fgx' must be recompiled"  на Berlin 10+:
    1) У обоих пакетов устанавливаем "Options->Description->Build control->Rebuild as need";
    2) Переустанавливаем пакет "fgx.***bpl" с этой опцией (fgx240.bpl);
    3) Находим "fgx.dcp" в $(BDS)\lib\win32\debug (этот путь прописан у "fgx.***bpl" в "Options->Delphi Compiler->DCP output directory" как "$(BDSLIB)\$(PLATFORM)\$(CONFIG)", например у меня это "C:\Program Files (x86)\Embarcadero\Studio\18.0\lib\win32\debug") и кладём в папку R101 (Update 1)\Design", где лежит "dclfgx.dproj";
    4) Туда же кладём все ".pas" из папки "R101 (Update 1)\Library";
    5) Теперь можно устанавливать design-time пакет "dclfgx.***bpl"
  17. Like
    Barbanel отреагировална Slym в HTTP отправка Image на сервер в формате stream   
    обычно ничего не получается сопровождается текстом: 'Ошибка сети: '+E.Message или lResponse.StatusCode
    Почувствуй разницу:
    у мена ошибка с текстом " " в строке n, снифаю - все уходит но не сервер не сохраняет, помогите мне,
    ой все! ничего не работает! вот мой высер, доделайте за меня... ну че, слабаки! не могете?
  18. Like
    Barbanel получил реакцию от Евгений Корепов в Выполнение операции после скрытия меню   
    Процедура Invalidate не перерисовывает форму немедленно, она лишь добавляет сообщение на перерисовку в очередь сообщений.
    Соотв. форма перерисуется когда не будет других событий в очереди, в данном случае - после всех длительных операций или после вызова .ProcessMessages
  19. Like
    Barbanel получил реакцию от gonzales в Запуск компилированного приложения.   
    Скорее всего увас в конфиге IDE прописан флаг WAIT_2_SECONDS_BEFORE_FMX_STARTS. Уберите его - и проблема исчезнет.
  20. Like
    Barbanel отреагировална krapotkin в Не подключается Huawei   
    Короче, действуем примерно так.
    Я надеюсь, что базовые действия - скачать google latest adb driver - мы уже провели, но наш No- или Brand- name телефон недоступен
    Тогда
    1) идем в диспетчер устройств, находим там наше невстающее устройство, кликаем дважды,  и на закладке Сведения выбираем свойство ИД оборудования. Копируем себе
    что-то типа 

    2)  идем к файлам того самого драйвера, открываем android_winusb.inf 
    находим разделы
    [Google.NTx86] и [Google.NTamd64]
    и вписываем туда, прямо в оба
    ;galaxy tab a 2019
    %SingleAdbInterface%        = USB_Install, USB\VID_04E8&PID_6866
    %CompositeAdbInterface%     = USB_Install, USB\VID_04E8&PID_6866&MI_01
     
    3) делаем обновить драйвер, выбираем вариант Вручную, и указываем тот модифицированный файл
    если не берет автоматом, то "Выбрать из списка уже установленных..." --> "Есть диск" --> "Да, мне пофиг что он не подписан"
    4) The End
     
  21. Like
    Barbanel отреагировална Vitaldj в Мобильная разработка на Delphi - программа для врачей по оценке взаимодействий лекарств.   
    Коллеги, я опубликовал на сайте FGX свое приложение. Можете «щупать». ?
     
    https://forum.fgx-native.com/topic/76-медицинская-программа-для-оценки-взаимодействия-препаратов/
  22. Like
    Barbanel отреагировална Олег Киреев в Приложение (OS Andr) для получения информации расчётным путём об углах в карданном вале v.5.   
    Приложение для получения информации расчётным путём об углах:
    - вертикальной плоскости;
    - в горизонтальной плоскости;
    - объёмный;
    - эквивалентный
     в шарнирах карданных валов на
    основе сделанных замеров на собранном автобусе, троллейбусе, грузовике.
    Может пригодиться работникам сервисных служб, лицам эксплуатирующим грузовую или
    пассажирскую автомобильные техники, лицам не конструкторских служб. 
    Особенно в случае нахождения в месте недоступном к интернету и компьютеру.
    Работает на устройствах под OS Android.
    Существует и более расширенная версия для OS Windows.
    Пожалуйста, с предложениями и пожеланиями обращайтесь к разработчику:
    Кирееву Олегу по тел. +375 29 676 13 84 или пишите на kireevoleg1966@gmail.com.
     Буду рад Вашему любому отзыву.
     С Уважением.
     
     
     
     
     
     
     
     
     
     
     
     
    UgolKardZamer_v5.rar








  23. Like
    Barbanel отреагировална Евгений Корепов в Логика авторизации по отпечатку пальца   
    В телефоне нет никаких гарантированных аппаратных данных - или по причине китайщины, или по тому что их можно изменить. Если уже вам так хочется "привязаться" к чему то неизменному, то привязывайтесь к телефонному номеру. Хотя и его может не быть. 
    Палец не панацея - у вас нет никаких гарантий что палец принадлежит владельцу персональных данных. 100% дактилоскопических данных пользователя у вас нет, а на этапе "привязки" пальца, телефон уже может быть в руках злоумышленника.
    У вас не получится сделать идеальную систему с абсолютной системой от дурака. Поэтому я и предложил исходить из того что приложение на телефоне запускает легальных пользователь. Все иное должно описываться в политике конфиденциальности, типа мы чтим закон о ПД, но если вы долбоклюй и отдали телефон и пинкод постороннему, то вы сами пролюбили свою медкарту.
    И пинкод никак не позволит войти на другом устройстве - пин код сохраняется локально на устройстве, в папке приложения. И если пользователь ввел его верно, то запросы на сервер авторизуются с заранее сохраненного на устройстве токена (guid, куки или что вам больше нравится). 
    Ситуации "А если кто взломает телефон и перенесет какой то файл на другое устройство" вас не должны волновать абсолютно. Вы предоставили пользователю приложение, а задача пользователя  - не пролюбить телефон и свои персональные данные. Дополнительно вы прикрываете свою задницу политикой конфиденциальности, где описываете что не обязаны охранять пользователя и его телефон круглые сутки.
  24. Like
    Barbanel отреагировална krapotkin в Свой APK updater. Использование Fileprovider   
    У меня в работе два приложения, и оба они не предназначены для Play market, так как имеют ограниченный круг использования, по сути, чисто внутрикорпоративные. Так что нежелательно и выкладывание их и на альтернативные магазины приложений. 
    Автоматически возникает вопрос обновления. Если в  первый раз мы можем установить приложение сами при помощи админов, то обновлять их не так просто. А контингент пользователей не справится с "скачайте APK по ссылке, найдите, куда его скачал браузер, и запустите вручную именно последний скачанный, а не какой попало"...
    Простейший способ - дать приложению скачать свежую копию с сайта и натравить на полученный файл системный инсталлер.
    Вот только свежие Andoird делать это напрямик запрещают. Нужен filepropvider. Целый день шуровал по мануалам и YT,
    Вот то что получилось  в результате.
    Если у вас 10.3.3 как у меня, уже можно не вносить <provider>...</provider> в манифест и свой файл file_paths.xml (или как вам его советуют назвать в интернетах) в деплой.
    Теперь все это делается хоть несколько странно и однобоко, но автоматически, путем установки галочки Secure File Sharing

    после этого в манифесте автоматически пропишется один из вариантов размещения файлов, которые вы можете найти в интернете. Используется алиас external-path
    файл, показанный на рисунке, создается автоматически самой делфи.

    теперь остается отгадать, какой путь реально подставится вместо "."
    Как показала практика, все пути выглядят не так, как кажется, если исходить из простого здравого смысла. Целый день использования GetHomeDir и других полезных методов TPath завел меня совсем в тупик.
    Оказалось все проще (?)
    st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; ... OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); обратите внимание, в provider_paths мы задаем external-paths, а в коде ищем ExternalCacheDir.!!!  (For.Unbelievably.Creative.Knowers!)
    Потом все просто. FApkUri передаем в интент и запускаем 
    итоговый код примерно таков. (скачивание в потоке с использованием небольшого собственного API, но там ничего важного, можно не обращать внимания)
    procedure TasdSettingsFrame.bDownloadClick(Sender: TObject); begin {$IFDEF ANDROID} bDownload.Enabled := False; DownloadAndRun(); {$ENDIF} end; {$IFDEF ANDROID} procedure TasdSettingsFrame.DownloadAndRun(); begin ttask.Run(procedure var aapi:TasdAPI; st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; begin st := TMemoryStream.Create; aapi := TasdAPI.Clone(_API); try aapi.OnReceiveData := OnReceiveData; aapi.getApk(st); if aapi.Err.Code=0 then begin OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); TThread.Synchronize(nil,procedure begin bDownload.Enabled := true; StartActivity(FApkUri); end); end; finally st.Free; aapi.Free; end; end); end; procedure StartActivity(ApkUri: Jnet_Uri); var Intent: JIntent; begin Intent := TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.setDataAndType(apkuri, StringToJString('application/vnd.android.package-archive')); TAndroidHelper.Activity.startActivity(Intent); end; procedure TasdSettingsFrame.OnReceiveData(const Sender: TObject; AContentLength: Int64; AReadCount: Int64; var Abort: Boolean); begin tthread.Synchronize(nil, procedure begin pb1.Max := AContentLength; pb1.Value := AReadCount; end); end; {$ENDIF} Вопросы остались конечно, почему так странно с каталогами, но выяснять пока нет желания. Работает - не трожь.
    Всем удачи.
    UPD.
    Для того, чтобы системный инсталлер запускался, нужно не забыть отметить еще одну галочку

     
     
     
     
     
  25. Like
    Barbanel отреагировална Dmitry_4501 в BlurBehind Control   
    BlurBehind Control. 
     
    Компонент позволяет использовать размытие, по типу, которое реализовано в WIndows 10, т.е компонент позволяет "размыть" то, что находится под ним.
     
    Пусть и увидел это непосредственно в самой студии на стартовой странице (Welcome Page), но все-таки подумал скинуть ссылку сюда.

    Исходники: https://github.com/grijjy/CodeRage2019/tree/master/BlurBehind
    Видео:

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