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

Barbanel

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

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

  • Посещение

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

    36

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

  1. Like
    Barbanel получил реакцию от #WAMACO в Андроид. Обучение пользователя новым функциям приложения   
    В аттаче пример того как я себе представляю такую реализацию. Будем использовать в нашем проекте.
    Буду рад критике, предложениям, и все такое.

    TestWhatsNew.zip
  2. Like
    Barbanel получил реакцию от OnePeople в Андроид. Обучение пользователя новым функциям приложения   
    В аттаче пример того как я себе представляю такую реализацию. Будем использовать в нашем проекте.
    Буду рад критике, предложениям, и все такое.

    TestWhatsNew.zip
  3. Like
    Barbanel получил реакцию от Ingalime в Андроид. Обучение пользователя новым функциям приложения   
    Тоже задумывался об этом, правильного ответа не знаю, но мысли есть:
    Вариант 1
    -сделать скриншот всего экрана (программно из дельфи, даже не экрана а формы)
    -затенить весь скриншот, предположим на 40-50% (т.е. снизить интенсивность каждого пикселя)
    -зная местоположение вашей кнопки с новой фичей, вырезать эту область из альфаканала скриншота (если делать круто - то вырез должен быть не прямоугольным а круглым, соотв. нужно както преобразовать прямоугольную кнопку в подходящих размеров круг)
    -вывести этот скришнот поверх всех контролов формы, не забыть положить на скриншот текст с описанием фичи и кнопкой перехода к следующей фиче.
    Вариант 2
    -сделать скриншот всего экрана тупо чтобы знать его размеры
    -залить черным цветом
    -залить весь альфаканал на те же 40-50% (т.о. если вывести эту картинку поверх, она будет лишь затенять все что под ней)
    -аналогично предыдущему пункту вырезать дырку в альфаканале
    -аналогично предыдущему пункту вывести поверх формы
    Различия в том, что первый вариант вроде бы проще.
    Второй вариант зато позволит видеть анимированные контролы под затенением (если он и есть и нужны).
    Также буду раз услышать другие варианты.
  4. Like
    Barbanel получил реакцию от Yarpda в Андроид. Обучение пользователя новым функциям приложения   
    Кстати есть. TCircle
    Задайте ему размер и толщину Stroke и будет вам счастье)
  5. Like
    Barbanel отреагировална #WAMACO в Андроид. Обучение пользователя новым функциям приложения   
    ну так, все что выше написали, оформите, как компонент и будет счастье! заодно потом и с нами поделитесь! :))
  6. Like
    Barbanel отреагировална OnePeople в Андроид. Обучение пользователя новым функциям приложения   
    1.Можно взять Rectangle, залить его с Alpha 70%. И поместить в него изображение.
    2.Затем расчитать абсолютное положение контрола на форме, его размеры,сделать его скриншот.
    3.Изображению задать соответствующие размеры, координаты и скриншот контрола, можно добавить свечение.
  7. Like
    Barbanel отреагировална #WAMACO в Андроид. Обучение пользователя новым функциям приложения   
    1. Сделать скриншот формы.
    2. Показать новую форму с фоном скриншота (слегка размыв скриншот)
    3. На новой форме лепить что душе угодно, переходы и т.д.
    4. По окончании обучающего ролика, закрыть форму ролика и взвести флаг, что ролик показан! (для последующих не выводом ролика)
    это если изолированный ролик, как таковой. если нужны подсказки к контролам, то можно выводить кастомные toast-ы, например с помощью Layout и обычного Rectangle поверх.
  8. Like
    Barbanel отреагировална Vitaldj в Мобильная разработка на Delphi - программа для врачей по оценке взаимодействий лекарств.   
    Скорость отличная. У меня ну совсем слабый смартфон. Расчет более продолжительный, но там очень много препаратов для анализа, десктоп тоже секунд 5 считает)). И вот скорость:

    48099C11-B3FF-464E-B179-728E48CCC23B.MP4
  9. Like
    Barbanel отреагировална Vitaldj в Мобильная разработка на Delphi - программа для врачей по оценке взаимодействий лекарств.   
    Могу пока только дать саму презентацию, она в открытом доступе.
     
    https://www.dropbox.com/s/hjpj1dzpnedfjne/PharmControl.pptx?dl=0
     
  10. Like
    Barbanel отреагировална Vitaldj в Мобильная разработка на Delphi - программа для врачей по оценке взаимодействий лекарств.   
    Доклад вызвал большой интерес. Особенно у практических врачей. В презентации были все координаты, включая информацию об FGX. Что касается самого приложения, то нужно кое что доделать. Ближе к лету дам на пробу. 
  11. Like
    Barbanel отреагировална Yarpda в Delphi Rio Android application.processMessages; dosent work   
    Ну в 10.3 как раз ничем не хуже. Точно также не будет работать.
    Как я понимаю, не нужно просто пробежаться от 0 до 100 в прогрессбаре.
    Тут приведен просто пример, а на самом деле же нужно выполнять какой-то код в программе, который будет вместо sleep(100), а если это делать, то все встанет колом едва запустившись. И там уже не до progressbar будет, потому что цикл в зависимости значения таймера пойдет как попало. В общем это решения ОЧЕНЬ спорное на мой взгляд.
  12. Like
    Barbanel отреагировална haword в SpkToolbar   
    Перевел vcl/lcl версию тулбара для работы под fmx. Версия с очень грязным кодом, с кучей закоменченного кода, где что то тестировал что то работало, что то нет. Короче как есть так и выложил. Главное на данный момент - работает под Windows, macOS, Lubuntu 18.10. Но ошибок наверное куча так как полностью не проверял. Буду со временем править.
    https://github.com/haword/spktoolbar
  13. Haha
    Barbanel отреагировална gonzales в Переезд на 10.3 Rio   
    Чего Вы привязались к прогрессбару, это никак не связано с потоками, я просто уточнял, нужно ли обращаться к форме, созданной в потоке через синхронизацию. 
    Прочитайте посты выше, вроде как уже больше недели это обсуждаем.
     
    У вас очень странное представление о UI. Вы правда считаете, что я демонстрирую пользователю одновременно Сплэш, две формы, и повергающий его в экстаз прогрессбар??
  14. Like
    Barbanel отреагировална krapotkin в Типовая задача доступа к данным - Нужен дельный совет   
    по вопросам.
    1) выбор на хостингах невелик - MySQL, Postgres.  Я PG выбрал чисто в силу интереса и он вроде поближе к стандартам, и у него ХП и другие всякие штуки.... Сижу на SWEB.RU. Опять же просто потому что давно. Есть и masterhost и любой другой крупный провайдер подойдет.
    2) не путаем хостинг с бэкенд-сервером (BAS). Типа Firebase или Amazon или еще туча. на хостинге у вас все свое. что написали то и работает. на BAS есть много приятных плюшек. Довольно платных ессно. Зато и push и email рассылки и админка...
    3) MSSQL не вариант. Веб в основном на Linux.
    4) обычно просто THttpClient. На нем нормально пишется клиентская часть API
    5) обычная схема. просто с нуля некоторые вещи пилить. зато бесплатно. Практика показывает что иногда лучше заплатить и получить богатое приложение сразу. но иногда как написал Евгений, потом можно упереться в ограничения сервисов. Но можно решать проблемы по мере поступления...
     
  15. Thanks
    Barbanel получил реакцию от Bob32 в Типовая задача доступа к данным - Нужен дельный совет   
    Согласен, у каждого свое.
    Мое - из опыта. Мы в свое время заморочились с "правильным" подходом, и прозевали конкурента с похожим функционалом. Было пипец как обидно.
    FireMonkey без сомнений имеет свои недостатки и глюки. Но для тех кто знаком с Дельфи - это простой способ выпуститься на мобильных устройствах.
    FireMonkey без сомнений проигрывает нативным языкам, но выигрывает в скорости разработки.
    Что выбирать - каждый решает сам исходя из своих задач и возможностей.
  16. Like
    Barbanel отреагировална Евгений Корепов в Типовая задача доступа к данным - Нужен дельный совет   
    1) Не безопасно. Потому как авторизация нужна (хотя бы в виде ключа "xq34mt89o32834yt9148t87913" в параметрах запроса ?
    2) Это точно не нужно  - безумная на грузка на сервер, транспортный протокол и клинта.
    3) FTP  - можно но нафик. Во первых отдельная логика на стороне клиента, во вторых хостер обычно предоставляет FTP доступ ко всей площадке, а хранить логин/пароль от площадки на клиенте это - нельзя.
    К счастью у нас на стороне сервера есть PHP, который для этого и предназначен:
    <?php //@ini_set("display_errors", "1"); error_reporting(E_ALL); @ini_set("display_errors", "0"); error_reporting(0); $SecureToken = "ce48oltq38p94tv83"; // Ключ для доступа $FilesPath = "/usr/share/My_Secret_File_folder/"; // Место хранения бинарных файлов // Просто пример неких данных для передачи пользователю в формате JSON (но храним и оперируем мы ими в обычном массиве $ExampleUserData = array( "Овощи" => array( "Помидорка", ), "Фрукты" => array( "Яблочко", ), ); if (!isset($_GET['token']) or $_GET['token'] != $SecureToken) { echo "Ах ты хитрая жопа! Пожалуйста, не взламывай мой сервер!"; exit; } if (!isset($_GET['command'])) { echo "Нет команды, не знаю что делать..."; exit; } switch ($_GET['command']) { "get_file" : if (!isset($_GET['file_name'])) { echo "Не знаю какой файл ты хочешь..."; exit; } $BinatyFilePath = $FilesPath . $_GET['file_name']; if (!file_exists($BinatyFilePath)) { echo "Не угадал, нет такого файла..."; exit; } if (ob_get_level()) { ob_end_clean(); } header('Content-Description: File Transfer'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($BinatyFilePath)); // читаем файл и отправляем его пользователю if ($fd = fopen($BinatyFilePath, 'rb')) { while (!feof($fd)) { print fread($fd, 1024); } fclose($fd); } break; "get_data" : $JSONData = json_encode($ExampleUserData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); header('Content-Type: application/json; charset=utf-8'); echo $JSONData; break; default : echo "Не знаю такой комманды..."; } Вот это простой кусок кода сделает следующие вещи:
    http://my_server.com/api/?token=ce48oltq38p94tv83&command=get_data - отдаст JSON данные 
    http://my_server.com/api/?token=ce48oltq38p94tv83&command=get_file&file_name=naked_girl.jpg - отдаст бинарный файл, предположительно с изображение голой девушки.
    Ну а на в приложении вам останется только:
    Var HTTPResponse : IHTTPResponse;
    begin
    HTTPResponse:=FHTTPClient.Get(AURL);
    HTTPResponse.ContentAsString или HTTPResponse.ContentStream, смотря что вы запрашивали.
     
  17. Like
    Barbanel отреагировална Евгений Корепов в Типовая задача доступа к данным - Нужен дельный совет   
    1. Хостинг рекомендую https://masterhost.ru/service/hosting/individual/ , это один из старейших и надежнейших хостеров России, там вы получите сразу все вам необходимое - MySQL, PHP любимой версии, если проект попрет, то сможете добавлять процессоры, память и т.д. Так же сможете зарегить домен под это дело, и при надобности получить SSL сертификат на этот домен. Все остальные хостинги  игнорируйте, по крайней мере Российские. За почти 20 лет использования, мастерхост ни разу не подвел, а только радовал новыми плюшками.

    Реализация в вашем случае примерно такая:
    1. MySQL на хостере - обеспечит вам работу и 10 миллионов активных пользователей. Но важно правильно  спланировать структуру базы, структуру таблиц и структуру индексов таблиц. Если вы в этом не профи, то лучше нанять профи - ибо это фундамент, который потом очень сложно будет изменить.
    2. PHP на хостере - прокладка между базой и запросами/ответами приложения. Рекомендую использовать самую свежую версию PHP, чтоб потом не пришлось перекраивать код удаляя deprecated функции и конструкции.
    3. Протокол обмена - REST. Не вздумайте погружаться в теорию, читать про RESTful и пытаться реализовывать, этим занимаются только люди под тяжелыми наркотиками и обычно без единого законченного реального проекта. Достаточно того что приложение будет отправлять на сервер GET запросы получать JSON ответы. Можете подогнать протокол под существующие в Delphi компоненты TRESTClient, а можете и сами на стороне приложения разгребать JSON и получать нужные данные. Это совсем не сложно.
    4. Приложение - посылает на сервер HTTP GET (ну или POST) запросы посредством THTTPClient, получает ответы в виде JSON, парсит их и так далее. Все содержимое предыдущего предложения - в отдельном потоке. Ну или используйте готовый TRESTClient - если готовы разбираться в нюансах его работы.
    Вот как то так.
  18. Like
    Barbanel отреагировална Евгений Корепов в Не работает onClose (Android)   
    Для этого есть событие TForm.OnSaveState http://docwiki.embarcadero.com/Libraries/Rio/en/FMX.Forms.TForm.OnSaveState
  19. Like
    Barbanel отреагировална #WAMACO в Типовая задача доступа к данным - Нужен дельный совет   
    http://mraven.ru/RavenLink.html
    вот еще простейший REST сервер. очень просто использовать. 
    причем не нужен architect edition, community подойдет даже
     
  20. Like
    Barbanel отреагировална #WAMACO в Типовая задача доступа к данным - Нужен дельный совет   
    http://www.myclouddata.net
    и к ним компоненты для комфортной работы
    https://www.tmssoftware.com/site/tmsfmxcloudpack.asp
  21. Like
    Barbanel получил реакцию от Ingalime в Типовая задача доступа к данным - Нужен дельный совет   
    Согласен, у каждого свое.
    Мое - из опыта. Мы в свое время заморочились с "правильным" подходом, и прозевали конкурента с похожим функционалом. Было пипец как обидно.
    FireMonkey без сомнений имеет свои недостатки и глюки. Но для тех кто знаком с Дельфи - это простой способ выпуститься на мобильных устройствах.
    FireMonkey без сомнений проигрывает нативным языкам, но выигрывает в скорости разработки.
    Что выбирать - каждый решает сам исходя из своих задач и возможностей.
  22. Like
    Barbanel отреагировална Евгений Корепов в Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию   
    Вот вам apk приложения для того чтоб потестить самостоятельно. 
    UhtaBus.7z
  23. Like
    Barbanel отреагировална Евгений Корепов в Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию   
    Я проверил. После патча все работает как задумано, браузер наследует разрешения приложения:
    Если приложению правильно даны разрешения на геолокацию, то браузер разрешения не спрашивает, геолокация нормально работает в браузере. Если пользователь не дал приложению разрешение на геолокацию, то в браузере она тоже работать не будет, причем браузер и не будет сообщать о том что нет разрешения - при тыке на кнопку мое положение ничего не происходит. Это вполне нормально - пользователь сознательно отказался и понимает что геолокация работать не будет. Приложение, если пользователь не дал разрешение, и не должно по идее открывать браузер, если геолокация важная составляющая сервиса. У меня к примеру выдается сообщение - мол вы не дали разрешение, приложение работать не может. И по идее нужно предлагать пользователю открыть настройки для того чтоб он дал разрешение. Кстати в каком то приложении видел что по кнопке открываются настройки приложений - удобно, но как интересно это сделать?
     
  24. Like
    Barbanel отреагировална haword в Типовая задача доступа к данным - Нужен дельный совет   
    у каждого свое мнение. зная глючность firemonkey, человек вопрется в кучу косяков. начнет из разгребать. народ будет устанавливать его ПО отлавливать глюки и минусовать в магазинах. если хоть ка кто взлетит и сможет пойти к инвесторам, то придется тогда полностью выгонять всех кто писал и заново набирать команду чтобы переписать на других языках. по моему так себе путь.
    а если изначально сделать на нативных языках, да кое как чтобы лишь бы запустилось, то потом уже много переделывать не надо будет с нуля переписывать. 
    но тут конечно выбор каждого как ему что делать.
  25. Like
    Barbanel отреагировална Alexey Shumkin в Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию   
    Расписывать в деталях прям не буду
    https://gist.github.com/ashumkin/3e2e213d657162ae26d364a85c64b472
     
×
×
  • Создать...