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

Barbanel

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

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

  • Посещение

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

    36

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

  1. Thanks
    Barbanel отреагировална Евгений Корепов в Helper для TBitmap - асинхронная загрузка картинки из URL   
    Пока тестировал хелпер в боевом проекте он потихоньку оброс исрпавлениями/улучшениями:
    Загрузка из потока сделана через TBitmapSurface - это позволяет избежать множества глюков. LoadFromStream вынесен из Synchronize (основного потока) в поток HTTPClient - по результатам бенчмарка операция оказалась самая жручая. После исправления интерфейс перестал залипать совсем. Добавлен overload вариант с передачей в процедуру TListItemImage - для использования в TListView и корректной перерисовки подгруженных картинок через AListItemImage.Invalidate. unit BitmapAsyncLoader; interface uses FMX.Graphics, FMX.Surfaces, System.Net.HttpClient, System.Types, System.Classes, FMX.ListView.Types, FMX.ListView.Appearances; type TBitmapAsyncLoader = class helper for TBitmap procedure LoadFromURLAsync(const AUrl : String); overload; procedure LoadFromURLAsync(const AUrl : String; const AListItemImage : TListItemImage); overload; end; implementation var AHTTPClient : THTTPClient; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; ABitmapSurface : TBitmapSurface; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then begin ABitmapSurface:=TBitmapSurface.Create; if TBitmapCodecManager.LoadFromStream(AHTTPResponse.ContentStream, ABitmapSurface, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then TThread.Synchronize(Nil, procedure begin if Assigned(Self)then Assign(ABitmapSurface); ABitmapSurface.Free; end ) else ABitmapSurface.Free; end; end, AURL ); except end; end; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String; const AListItemImage : TListItemImage); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; ABitmapSurface : TBitmapSurface; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then begin ABitmapSurface:=TBitmapSurface.Create; if TBitmapCodecManager.LoadFromStream(AHTTPResponse.ContentStream, ABitmapSurface, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then TThread.Synchronize(Nil, procedure begin if Assigned(Self) and Assigned(AListItemImage) then begin AListItemImage.BeginUpdate; Assign(ABitmapSurface); AListItemImage.Invalidate; AListItemImage.EndUpdate; end; ABitmapSurface.Free; end ) else ABitmapSurface.Free; end; end, AURL ); except end; end; initialization AHTTPClient:=THTTPClient.Create; finalization if Assigned(AHTTPClient) then AHTTPClient.DisposeOf; end. Тестовый проект, на этот раз с ListView (по кнопке добавляется 100 итемов) прилагаю.
    BitmapAsyncLoaderListView.7z
  2. Like
    Barbanel получил реакцию от Tumaso в Data grid на android   
    Посмотрел TListView. Все еще проще.
    Идите в инспекторе в свойство ItemAppearance и там можно настроить высоту хедера и футера.
    Вот вам скриншот (Ааааа в данном случае - хедер):
     

  3. Like
    Barbanel отреагировална mazayhin в Как узнать Device Name на Андроиде?   
    Ну видимо, не для всех это очевидно.
    Ну и да, называется оно "имя", а про БТ не слова )
  4. Like
    Barbanel отреагировална mazayhin в Как узнать Device Name на Андроиде?   
    Это будет имя Bluetooth-адаптера.
    //uses System.Bluetooth; TBluetoothManager.Current.CurrentAdapter.AdapterName  
  5. Thanks
    Barbanel отреагировална Dmitry_4501 в [РЕШЕНО]: Как отловить кнопки пульта ДУ   
    В общем удалось решить проблему с кнопками пульта. Теперь приложение распознает все кнопки с пульта. Если кому-то нужно, прикрепил архив. (Delphi 10.3.1 Rio)
     
    fmx_androidkey_fix.zip
  6. Thanks
    Barbanel получил реакцию от denfm в Аналог TDBGrid для FMX   
    Вы случайно не в Эппл работаете?
    "Если у нас чего-либо нет - значит пользователям это не нужно" (С)
    Шучу-шучу)))
    Разумеется я отдаю себе отчет о накладных расходах, и о траффике. Миллион записей мы и за год не сгенерируем, а больше пары тысяч отображать и не требуется, а если и потребуется то был бы инструмент - проблема решится.
    Вопрос был лишь в том, есть ли такой аналог как DBGrid.
    Пытаюсь написать нечто похожее через хелпер к TGridModel, пока получается.
    Когда меня все будет устраивать - выложу в общий доступ.
  7. Like
    Barbanel отреагировална Tumaso в Библиотека компонентов Alcinoe для Delphi   
    @aleksandrguru сами то использовали alcinoe? я пробовал использовать.
    главные минусы - автор библиотеки не утруждает себя ответами на возникающие вопросы, многие вещи буферизации изображения и обновления этого буфера работают непонятно как.
    версию для Rio я не пробовал, честно говоря уже нет желания дальше чтото делать на этой библиотеке, но вот в Tokyo при добавлении TMapView работа alcinoe ломается, изображения на экране обновляется по непонятным правилам (не спасает например прямой вызов перестроения буфера). В TALImage невозможно вручную занести изображения, только либо из файла, либо из ресурса. И так далее.
  8. Thanks
    Barbanel получил реакцию от Vitaldj в Аналог TDBGrid для FMX   
    Вы случайно не в Эппл работаете?
    "Если у нас чего-либо нет - значит пользователям это не нужно" (С)
    Шучу-шучу)))
    Разумеется я отдаю себе отчет о накладных расходах, и о траффике. Миллион записей мы и за год не сгенерируем, а больше пары тысяч отображать и не требуется, а если и потребуется то был бы инструмент - проблема решится.
    Вопрос был лишь в том, есть ли такой аналог как DBGrid.
    Пытаюсь написать нечто похожее через хелпер к TGridModel, пока получается.
    Когда меня все будет устраивать - выложу в общий доступ.
  9. Like
    Barbanel получил реакцию от Anatoliy в Аналог TDBGrid для FMX   
    Вы случайно не в Эппл работаете?
    "Если у нас чего-либо нет - значит пользователям это не нужно" (С)
    Шучу-шучу)))
    Разумеется я отдаю себе отчет о накладных расходах, и о траффике. Миллион записей мы и за год не сгенерируем, а больше пары тысяч отображать и не требуется, а если и потребуется то был бы инструмент - проблема решится.
    Вопрос был лишь в том, есть ли такой аналог как DBGrid.
    Пытаюсь написать нечто похожее через хелпер к TGridModel, пока получается.
    Когда меня все будет устраивать - выложу в общий доступ.
  10. Like
    Barbanel отреагировална aleksandrguru в Библиотека компонентов Alcinoe для Delphi   
    Библиотека компонентов Alcinoe для Delphi
     
    Полноценный видеоплеер OpenGL, обертка Delphi WebRTC, родной ios / android TEdit, улучшенное управление Firemonkey, облачные сообщения Firebase, вход в Android / ios facebook sdk, Json / Bson Parser, обертка ImageMagick, клиент MongoDb и многое другое
    https://github.com/Zeus64/alcinoe
     
    Пример приложения 
    https://play.google.com/store/apps/details?id=club.kiskis.app&hl=en
  11. Haha
    Barbanel отреагировална Евгений Корепов в Подключение Admob к iOS   
    Я еще тупее чем думал. После нажатия "Update Local File Cache" все фреймворки подсосались сами с Mac mini ))))))))))))))
  12. Like
    Barbanel получил реакцию от Tumaso в Настройка Android SDK   
    Хех, будет весело ?
    Android NDK (native development kit) – это набор инструментов, которые позволяют реализовать часть вашего приложения используя такие языки как С/С++.
    Для того чтобы среда могла использовать эти утилиты при необходимости. Чуть больше про NDK можно прочитать здесь.
    Каждый АПИ-левел содержит новые возможности или исправления, отсутствующие в предыдущем АПИ.
    Какой именно АПИ нужен вам - можете решать сами.
    Различают минимальный АПИ (грубо говоря, это минимальная версия Андроида на котором программа может запуститься, но не обязательно будет работать в полном объеме)
    и целевой АПИ (версия Андроида, для которой собсно программа и предназначена).
    Как правило раньше хватало минимального АПИ 14, а целевой - 22 (если ине не изменяет память, не ручаюсь что цифры точные).
    Сейчас эти цифры изменились, минимальный если я не ошибаюсь 22 или 24, целевой - от 26 и выше. Связано это с тем, что Гугл закручивает гайки в плане безопасности (или просто загручивает гайки, потому что тупо может), и объявляет старые версии устаревшими и неподдерживаемыми.
    Может да, а может и нет. Смотря какие фичи из сдк используются.
    Но вообще, чаще всего да, могут.
    Добро пожаловать в новый чудный мир! ))))))
    На самом деле все работает, просто вы кое-что не сделали.
    Указывать разрешения в настройках проекта более недостаточно. Нужно, да, но теперь этого мало.
    Нужно запрашивать эти разрешения у пользователя в процессе работы программы, динамически. Более того, программа должна корректно отработать, даже если пользователь не выдал вам эти разрешения.
    Т.е. если вы хотите доступ к камере чтобы сфоткать что-то, вы спрашиваете пользователя, что программе нужна камера. Пользователь может и отказать, вы проверяете его ответ и в случае отказа делаете вид что вам не нужна камера, а не крашитесь как раньше)))
    Точно так же с другими разрешениями. Если программе в принципе необходимо разрешение, и без него она теряет свой смысл - то сообщать об этом пользователю.
    Тем с запросом разрешений на этом форуме - завались, есть даже примеры в самой Студии. Это на самом деле несложно.
  13. Like
    Barbanel получил реакцию от Anatoliy в Версия андроид   
    OMG!!!
    Я на днях обнаружил что наш Huawei P7 Lite, которому уже почти два года (и все эти два года он бездумно лежал на зарядке, от компа) ощутимо вздулся. Mea culpa.
    Другие ихние модели  - норм (правда они чуть помоложе).
    Отключил от зарядки, на всякий)))
  14. Like
    Barbanel получил реакцию от Anatoliy в Настройка Android SDK   
    Хех, будет весело ?
    Android NDK (native development kit) – это набор инструментов, которые позволяют реализовать часть вашего приложения используя такие языки как С/С++.
    Для того чтобы среда могла использовать эти утилиты при необходимости. Чуть больше про NDK можно прочитать здесь.
    Каждый АПИ-левел содержит новые возможности или исправления, отсутствующие в предыдущем АПИ.
    Какой именно АПИ нужен вам - можете решать сами.
    Различают минимальный АПИ (грубо говоря, это минимальная версия Андроида на котором программа может запуститься, но не обязательно будет работать в полном объеме)
    и целевой АПИ (версия Андроида, для которой собсно программа и предназначена).
    Как правило раньше хватало минимального АПИ 14, а целевой - 22 (если ине не изменяет память, не ручаюсь что цифры точные).
    Сейчас эти цифры изменились, минимальный если я не ошибаюсь 22 или 24, целевой - от 26 и выше. Связано это с тем, что Гугл закручивает гайки в плане безопасности (или просто загручивает гайки, потому что тупо может), и объявляет старые версии устаревшими и неподдерживаемыми.
    Может да, а может и нет. Смотря какие фичи из сдк используются.
    Но вообще, чаще всего да, могут.
    Добро пожаловать в новый чудный мир! ))))))
    На самом деле все работает, просто вы кое-что не сделали.
    Указывать разрешения в настройках проекта более недостаточно. Нужно, да, но теперь этого мало.
    Нужно запрашивать эти разрешения у пользователя в процессе работы программы, динамически. Более того, программа должна корректно отработать, даже если пользователь не выдал вам эти разрешения.
    Т.е. если вы хотите доступ к камере чтобы сфоткать что-то, вы спрашиваете пользователя, что программе нужна камера. Пользователь может и отказать, вы проверяете его ответ и в случае отказа делаете вид что вам не нужна камера, а не крашитесь как раньше)))
    Точно так же с другими разрешениями. Если программе в принципе необходимо разрешение, и без него она теряет свой смысл - то сообщать об этом пользователю.
    Тем с запросом разрешений на этом форуме - завались, есть даже примеры в самой Студии. Это на самом деле несложно.
  15. Like
    Barbanel отреагировална Евгений Корепов в как очистить память клавиатуры   
    Нашел еще более изящный способ, без исчезновения/показа клавиатуры:
    procedure TForm1.Button1Click(Sender: TObject); begin Memo1.SelectAll; Memo1.DeleteSelection; end;  
  16. Like
    Barbanel отреагировална Martifan в как очистить память клавиатуры   
    Спасибо большое добрый человек действительно работает
  17. Like
    Barbanel отреагировална Евгений Корепов в Версия андроид   
    К сожалению нисколько. Тут просто здравый смысл - вы приобретаете телефон хорошего качества, с нормальной гарантией и сервисом. Программа Android One гарантирует вам обновления (ежемесячные обновления и обновления OS) - это значит что устройство сможет помогать вам в разработке не один год. В последствии вы сможете продать устройство за приемлемые деньги, а не за 300 рублей (как раз по такой цене я распродал мусор Dexp купленный изначально, 4 года назад, по неопытности). Вот и все аргументы, никакого скрытого умысла.
    P.S. Добавлю - один из телефонов Dexp взорвался у меня прямо на столе. Чудом не сгорел рабочий кабинет, но часть рабочих бумаг погорело, слава богу все само потухло. Меня на месте в этот момент не было, телефон был подключен к компу - до этого занимался отладкой одного из приложений. Телефон превратился в оплавленный комок пластмассы. ))
  18. Like
    Barbanel отреагировална Ingalime в [Android] получить список подключенных Blutetooth устройств   
    Добрый день. Возможно, поможет страница, отсканированная мной из этой книги (получение списка авторизированных устройств):
    https://ridero.ru/books/c_builder_osnovy_programmirovaniya/
    Там большой раздел по FMX.
    Речь о С++ Builder, соответственно эти свойства есть и в дельфи.

  19. Like
    Barbanel отреагировална dnekrasov в Масштабирование экрана   
    Суда по Вашим скринам - не тянется картинка стиля - проверьте buttonstyle.background.NormalLink
  20. Like
    Barbanel отреагировална dnekrasov в Масштабирование экрана   
    Проверьте настройки проекта "Application->Enable High-DPI" После смены масштаба желательно перелогиниться в винде (особенно Win7)
  21. Like
    Barbanel отреагировална krapotkin в Подключение к БД Firebird из Android   
    примеров полно, но нужно бы ТЗ иметь.
    обращение из программы к серверу - через THttpClient
    сервер - в зависимости от умений и знаний, на любом языке. традиционно у нас в ходу PHP
     
  22. Like
    Barbanel отреагировална krapotkin в Подключение к БД Firebird из Android   
    wordpress думаю не совсем та платформа))
    тут на сайте полно примеров THttpClient
    а по поводу сервера вам нужно читать что-то типа PHP REST API tutorial, например
    https://klisl.com/php-api-rest.html
  23. Like
    Barbanel получил реакцию от #WAMACO в Версия андроид   
    Купил ребенку дешевый китайский Oukitel с алиэкспреса. (примерно 50 евро стоил)
    Был удивлен тем что студия его увидела.
    Запускать правда на нем приложения не пробовал.
    Попробую - отпишусь.
     
  24. Thanks
    Barbanel получил реакцию от Ingalime в Версия андроид   
    Купил ребенку дешевый китайский Oukitel с алиэкспреса. (примерно 50 евро стоил)
    Был удивлен тем что студия его увидела.
    Запускать правда на нем приложения не пробовал.
    Попробую - отпишусь.
     
  25. Like
    Barbanel получил реакцию от Ingalime в Версия андроид   
    Поддерживаю.
    На реальном железе быстрее и удобнее.
×
×
  • Создать...