Перейти к содержанию
  • Регистрация

Лидеры


Популярный контент

Показан контент с высокой репутацией за 21.06.2019 во всех областях

  1. 5 баллов
    Пока тестировал хелпер в боевом проекте он потихоньку оброс исрпавлениями/улучшениями: Загрузка из потока сделана через 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. 5 баллов
    Веб.бинар показал, что проделано огромная работа. Очень понравилось.
  3. 5 баллов
    В общем удалось решить проблему с кнопками пульта. Теперь приложение распознает все кнопки с пульта. Если кому-то нужно, прикрепил архив. (Delphi 10.3.1 Rio) fmx_androidkey_fix.zip
  4. 4 балла
  5. 4 балла
    Одной из распространенных проблем, с которыми сталкивается разработчик в ходе разработки мобильных приложений, является построение UI. На вебинаре мы рассмотрим реализацию некоторых типовых шаблонов мобильных приложений в контексте библиотеки FGX Native, сравним подходы, используемые для реализации одинакового функционала в FMX и FGX, а также познакомимся с уникальными ключевыми особенностями FGX Native, которые раскрывают все достоинства нативной разработки. В вебинаре принимает участие создатель FGX – Ярослав Бровин. Дата: 11 июля 2019 12:00 МСК. Ссылка на регистрацию: http://forms.embarcadero.com/FGXNative
  6. 4 балла
    mazayhin

    Как узнать Device Name на Андроиде?

    Это будет имя Bluetooth-адаптера. //uses System.Bluetooth; TBluetoothManager.Current.CurrentAdapter.AdapterName
  7. 3 балла
    qz5

    Версия андроид

    Я разбавлю своим вариантом: Leagoo Power 2. У него цена около 3000 рублей, из коробки идет Андроид 8.1, но можно поставить Андроид 9 и даже... Android 10!!! С одной стороны у меня среди родственников есть смарты от 4ой до 9-ой версии Андроид, да и моя прога сейчас на всех работает (пока она простая). Но с другой стороны решил поискать дешевый смарт, на который можно несколько разных версий Андроид поставить, но: 1. чтобы это было легко, без всяких разблокировок и т.п. (у новых Xiaomi, Huawei как раз проблемы с заблокированным загрузчиком) 2. чтобы был максимально дешевый 3. чтобы можно было поставить Андроид 8.1 и Андроид 9, причем разные сборки 4. чтобы не надо было ставить всякие Flash Tools и т.п. - искал, чтобы прошивка была простой и максимально без лишних программ Оказалось, что Leagoo Power 2 Pro: 1. Поддерживает GSI-прошивки от Project Treble (Андроид 8.1, Андроид 9 и Android 10) 2. стоит около 3000 рублей 3. Для прошивки не нужно никаких лишних программ! Достаточно ADB, а он и так уже идет вместе с Delphi (можно и самому ADB ставить на комп, если Delphi нет например) Взял на будущее, чтобы было дешевое устройство, на котором можно экспериментировать с прошивками Правда сам пока не пробовал - телефон получил, всё работает, но пока закинул его в коробочку, тестирую на смартфоне с Андроид 7 (он всё равно постоянно на столе и там нужные мне программы). Как прошить ТВРП: https://4pda.ru/forum/index.php?showtopic=928803&st=120#entry81458052 Другие версии Андроид брать здесь: https://4pda.ru/forum/index.php?showtopic=892755 Где купить: решайте сами, многие покупают на Пандао, но я почитал отзывы - Пандао какой-то странный магазин, ничего там не покупал и не стал из-за 200 рублей рисковать. Я взял там, где советует официальный производитель: https://vk.com/wall-148943419_19677 Доставила почта Сингапура за 20 дней. p.s. я кучу разных вариантов пересмотрел и остановился именно на нем. Самая легкая перепрошивка из всех, недорогой смарт, есть запчасти, возможность ставить разные кастомы. может кому пригодится
  8. 3 балла
    На вопросы Ярослав отвечал почти час, и судя по количеству и качеству вопросов, я бы не назвал это "междусобойчиком". Вы вроде разработчик, а не абстрактная домохозяйка в вакууме, я не думаю что зарегистрироваться - было для вас большим вызовом. Плюс, формат проведения мероприятия подразумевает именно серьезный вебинар, а не какой-либо стримчик на ютубчике или упаси хосспаде твичике. PS вебинар понравился, библиотека заочно также понравилась. Как только будут доступны обе мобильные платформы - буду склонять руководство к покупке библиотеки.
  9. 3 балла
    Barbanel

    Аналог TDBGrid для FMX

    Вы случайно не в Эппл работаете? "Если у нас чего-либо нет - значит пользователям это не нужно" (С) Шучу-шучу))) Разумеется я отдаю себе отчет о накладных расходах, и о траффике. Миллион записей мы и за год не сгенерируем, а больше пары тысяч отображать и не требуется, а если и потребуется то был бы инструмент - проблема решится. Вопрос был лишь в том, есть ли такой аналог как DBGrid. Пытаюсь написать нечто похожее через хелпер к TGridModel, пока получается. Когда меня все будет устраивать - выложу в общий доступ.
  10. 3 балла
    Yuriy2606

    Приложение вылетает на Android 9

    Решение: Do any of the following: 1- Update the play-services-maps library to the latest version: com.google.android.gms:play-services-maps:16.1.0 2- Or include the following declaration within the <application> element of AndroidManifest.xml. <uses-library android:name="org.apache.http.legacy" android:required="false" /> Закинул сюда, может кому-то пригодится. Ссылки: https://stackoverflow.com/questions/50461881/java-lang-noclassdeffounderrorfailed-resolution-of-lorg-apache-http-protocolve https://www.delphiworlds.com/2019/02/a-fix-for-using-tmapview-on-android-9-devices/
  11. 3 балла
    Нашел еще более изящный способ, без исчезновения/показа клавиатуры: procedure TForm1.Button1Click(Sender: TObject); begin Memo1.SelectAll; Memo1.DeleteSelection; end;
  12. 3 балла
    Vitaldj

    Версия андроид

    Поосторожнее на поворотах. Тут спросили, Евгений ответил. Причём тут реклама?
  13. 2 балла
    Для одного своего проекта сделал, поделюсь, вдруг кому пригодится. Тестировал под Windows и Android. Для использования просто добавьте BitmapAsyncLoader в uses, а дальше все просто: ImageControl.Bitmap.LoadFromURLAsync('https://bipbap.ru/wp-content/uploads/2017/10/0_8eb56_842bba74_XL-640x400.jpg'); Код юнита хелпера: unit BitmapAsyncLoader; interface uses FMX.Graphics, System.Net.HttpClient, System.Types, System.Classes; type TBitmapAsyncLoader = class helper for TBitmap procedure LoadFromUrlAsync(const AUrl : String); end; implementation var AHTTPClient : THTTPClient; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then TThread.Synchronize(Nil, procedure begin try Self.LoadFromStream(AHTTPResponse.ContentStream); except end; end ); end, AURL ); except end; end; initialization AHTTPClient:=THTTPClient.Create; finalization if Assigned(AHTTPClient) then begin AHTTPClient.DisposeOf; end; end. Архив с тестовым проектом прилагаю. BitmapAsyncLoader.7z
  14. 2 балла
    Не зря я высылаю Ярославу витамины!
  15. 2 балла
    Tumaso

    Библиотека компонентов Alcinoe для Delphi

    @aleksandrguru сами то использовали alcinoe? я пробовал использовать. главные минусы - автор библиотеки не утруждает себя ответами на возникающие вопросы, многие вещи буферизации изображения и обновления этого буфера работают непонятно как. версию для Rio я не пробовал, честно говоря уже нет желания дальше чтото делать на этой библиотеке, но вот в Tokyo при добавлении TMapView работа alcinoe ломается, изображения на экране обновляется по непонятным правилам (не спасает например прямой вызов перестроения буфера). В TALImage невозможно вручную занести изображения, только либо из файла, либо из ресурса. И так далее.
  16. 2 балла
    Евгений Корепов

    Подключение Admob к iOS

    Я еще тупее чем думал. После нажатия "Update Local File Cache" все фреймворки подсосались сами с Mac mini ))))))))))))))
  17. 2 балла
    Alex7wrt

    Подключение Admob к iOS

    Получилось, но только с подключением дополнительных фреймворков. Использовал JVEsuite.
  18. 2 балла
    Barbanel

    Настройка Android SDK

    Хех, будет весело Android NDK (native development kit) – это набор инструментов, которые позволяют реализовать часть вашего приложения используя такие языки как С/С++. Для того чтобы среда могла использовать эти утилиты при необходимости. Чуть больше про NDK можно прочитать здесь. Каждый АПИ-левел содержит новые возможности или исправления, отсутствующие в предыдущем АПИ. Какой именно АПИ нужен вам - можете решать сами. Различают минимальный АПИ (грубо говоря, это минимальная версия Андроида на котором программа может запуститься, но не обязательно будет работать в полном объеме) и целевой АПИ (версия Андроида, для которой собсно программа и предназначена). Как правило раньше хватало минимального АПИ 14, а целевой - 22 (если ине не изменяет память, не ручаюсь что цифры точные). Сейчас эти цифры изменились, минимальный если я не ошибаюсь 22 или 24, целевой - от 26 и выше. Связано это с тем, что Гугл закручивает гайки в плане безопасности (или просто загручивает гайки, потому что тупо может), и объявляет старые версии устаревшими и неподдерживаемыми. Может да, а может и нет. Смотря какие фичи из сдк используются. Но вообще, чаще всего да, могут. Добро пожаловать в новый чудный мир! )))))) На самом деле все работает, просто вы кое-что не сделали. Указывать разрешения в настройках проекта более недостаточно. Нужно, да, но теперь этого мало. Нужно запрашивать эти разрешения у пользователя в процессе работы программы, динамически. Более того, программа должна корректно отработать, даже если пользователь не выдал вам эти разрешения. Т.е. если вы хотите доступ к камере чтобы сфоткать что-то, вы спрашиваете пользователя, что программе нужна камера. Пользователь может и отказать, вы проверяете его ответ и в случае отказа делаете вид что вам не нужна камера, а не крашитесь как раньше))) Точно так же с другими разрешениями. Если программе в принципе необходимо разрешение, и без него она теряет свой смысл - то сообщать об этом пользователю. Тем с запросом разрешений на этом форуме - завались, есть даже примеры в самой Студии. Это на самом деле несложно.
  19. 2 балла
    Евгений Корепов

    Версия андроид

    К сожалению нисколько. Тут просто здравый смысл - вы приобретаете телефон хорошего качества, с нормальной гарантией и сервисом. Программа Android One гарантирует вам обновления (ежемесячные обновления и обновления OS) - это значит что устройство сможет помогать вам в разработке не один год. В последствии вы сможете продать устройство за приемлемые деньги, а не за 300 рублей (как раз по такой цене я распродал мусор Dexp купленный изначально, 4 года назад, по неопытности). Вот и все аргументы, никакого скрытого умысла. P.S. Добавлю - один из телефонов Dexp взорвался у меня прямо на столе. Чудом не сгорел рабочий кабинет, но часть рабочих бумаг погорело, слава богу все само потухло. Меня на месте в этот момент не было, телефон был подключен к компу - до этого занимался отладкой одного из приложений. Телефон превратился в оплавленный комок пластмассы. ))
  20. 1 балл
    sinuke

    переход к x64?

    Да вообще не лучше - дома все устройства с 9-м андройдом. Так что лично я вообще не знаю что делать
  21. 1 балл
    Barbanel

    переход к x64?

    Т.е. в коммьюнити эдишн его не будет. Редиски!!!
  22. 1 балл
    qz5

    переход к x64?

    Нашли способ, чтобы Плеймаркет не ругался на отсутствие 64-битности, вот оно: http://www.fmxexpress.com/learn-how-to-deploy-delphi-10-3-rio-android-apps-to-google-play-with-android-64-bit-requirements/ Но правда есть проблема: после этого не даст установить такое приложение на Андроид 9 и 10.
  23. 1 балл
    qz5

    переход к x64?

    Вышла версия 10.3.2 - https://community.idera.com/developer-tools/b/blog/posts/announcing-the-release-of-delphi-c-builder-and-rad-studio-10-3-2 Добавили поддержку macOS 64 бит, нотификации и поддержка Линукса новые теперь тоже из коробки поддерживаются но вот Андроид 64 - всё еще нет
  24. 1 балл
    qz5

    переход к x64?

    Нет, не игра, приложение. Просто на Java писать не охота, но желательно кроссплатформенно, чтобы потом на iOS тоже портировать. Лазарус - там Паскаль, его знаю. Unity - там C# и смогу разобраться. Код на Яве на Яблоко не перенесешь. Смотрел еще всякие Kotlin, React Native, но мне больше всего подходит именно Delphi Community Edition.
  25. 1 балл
    qz5

    Версия андроид

    И так я прошил этот телефон за 3000 рублей на Андроид 9 с помощью ADB, который идет вместе с Delphi! Примерно за 15 минус справился, вместе со скачиванием прошивки. Так что для тех, кто хочет иметь дешевый телефон с поддержкой Андроид 8.1, 9 и 10 - https://vk.com/wall-148943419_19677 Делал по инструкции из ссылок, что выше дал, так что всё ОК.
  26. 1 балл
    mazayhin

    Как узнать Device Name на Андроиде?

    Человек хочет получить то имя, которое на скрине идет первой строкой, на сколько я понял
  27. 1 балл
    qz5

    THTTPClient

    Подробности на английском языке: https://medium.com/@imstudio/android-8-cleartext-http-traffic-not-permitted-73c1c9e3b803 https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6 но достаточно, что я выше написал
  28. 1 балл
    qz5

    THTTPClient

    Сделайте как здесь написано http://fire-monkey.ru/topic/5631-не-открываются-страницы-на-android-9/#comment-36008
  29. 1 балл
    Yuriy2606

    Приложение не работает на Spreadtrum SC9863A

    Здравствуйте. Проблема решилась очень просто - обновлением RAD до версии Embarcadero® Delphi 10.3 Version 26.0.33219.4899 Ссылка на торрент https://softtorrent.ru/tt/3276.SoftTorrent.ru.torrent Предыдущую версию полностью удалил -> перезагрузка -> установка свежей версии. Заработало всё в штатном режиме.
  30. 1 балл
    Barbanel

    ip адрес устройства Delphi fmx android

    Не скажу как это сделать через Indy, но через системные обертки это можно. Обратите внимание на метод JWifiInfo.getIpAddress Надеюсь вам поможет. NetworkState.zip
  31. 1 балл
    Эти два высказывания, вместе взятые, звучат зловеще
  32. 1 балл
    Barbanel

    Data grid на android

    Посмотрел TListView. Все еще проще. Идите в инспекторе в свойство ItemAppearance и там можно настроить высоту хедера и футера. Вот вам скриншот (Ааааа в данном случае - хедер):
  33. 1 балл
    mazayhin

    Как узнать Device Name на Андроиде?

    Ну видимо, не для всех это очевидно. Ну и да, называется оно "имя", а про БТ не слова )
  34. 1 балл
    Спасибо! Посмотрел diff - как и предполагал, Эмбаркадера поленилась скопипастить все коды, видимо в буфер обмена у них влезла только часть Ну как так то? Спасибо вам за проделанную работу!
  35. 1 балл
    Если будите использовать Mapview то нужно добавить в манифест <uses-library android:name="org.apache.http.legacy" android:required="false" />
  36. 1 балл
    Обновил Вот посмотри пример все работает https://okurl.ru/Ga7V5RR
  37. 1 балл
    Как бы не визуальные компоненты не нужно заново создавать)). Они в FGX работают "из коробки".
  38. 1 балл
    krapotkin

    Как убить кнопку кликнув на нее саму

    нет никакой подстраховки)). не надо чудесизировать исполнение программы обработчик работает в главном потоке, и наша задача - дать ему с гарантией завершиться! исключительно для этого мы вызываем Synchronize() из другого потока программа придет туда не абы когда а только после выполнения всех текущих работ основного потока. То же самое можно достигнуть в windows сделав postMessage() Ну и создание объекта подчиняется тем же условиям. Если он РЕАЛЬНО не удалился, то самостоятельно убив его через DisposeOf, мы получим с большой вероятностью AV из-за того, что где-то ссылка на него еще есть!
  39. 1 балл
  40. 1 балл
    Решение найдено - после добавления TLabel в панель нужно вызывать TLabel.RecalcSize.
  41. 1 балл
    Вы вообще читаете форум? Ярослав ведёт набор в бета тестеры. Все там написано.
  42. 1 балл
    Tumaso

    TIDTCPClient, TIDTCPServer

    Чтобы приложение оставалось активным в фоновом режиме (я про андроид), приложение должно отображать постоянное уведомление. Сам такое уведомление еще не реализовывал, поэтому технической реализации не подскажу (пока по крайней мере)
  43. 1 балл
    Barbanel

    Версия андроид

    OMG!!! Я на днях обнаружил что наш Huawei P7 Lite, которому уже почти два года (и все эти два года он бездумно лежал на зарядке, от компа) ощутимо вздулся. Mea culpa. Другие ихние модели - норм (правда они чуть помоложе). Отключил от зарядки, на всякий)))
  44. 1 балл
    Martifan

    как очистить память клавиатуры

    Спасибо большое добрый человек действительно работает
  45. 1 балл
    Евгений Корепов

    Wifi Multicast packets

    Я использую для такого Indy, там все готовенькое, в том числе и TIdUDPServer со всем нужным вам функционалом (и потоками). Вот в теме немного обсуждения
  46. 1 балл
    msp888

    Wifi Multicast packets

    Жаль, что никто не помог... Проблему решил. Как всегда embarcadero ничего не доводит до конца! Обертка для мультиплатформенного сокета (TSocket) криво работает как под windows так и под android. Для работы с Multicast-пакетами под android используйте JMulticastSocket из android api.
  47. 1 балл
    Добрый день. Возможно, поможет страница, отсканированная мной из этой книги (получение списка авторизированных устройств): https://ridero.ru/books/c_builder_osnovy_programmirovaniya/ Там большой раздел по FMX. Речь о С++ Builder, соответственно эти свойства есть и в дельфи.
  48. 1 балл
    krapotkin

    Размеры TPanel

    во время FormCreate еще не определены размеры лучше в OnShow, или OnResize
  49. 1 балл
    AlexG

    [ListBox] загрузка картинок

    1. Создайте свой стиль для ListBoxItem, например 'listboxitemMystyle', скопировав стандартный и переобозвав его. В своем стиле Итемов просто сделайте невидимым Detail. Или, что еще лучше, - храните Ваши ссылки в TagString Итема. 2. В Style Designer, при редактировании Вашего listboxitemMystyle, вставьте TImage задайте ему необходимые свойства: выравнивание, размеры, отступы и т.д. (не забудьте сделать "растягивание" или что там Вам требуется - просто проверьте в дизайнере). И задайте Вашему TImage имя, например, 'myimagestyle'. 3. При загрузке изображения я бы рекомендовал сначала загрузить изображение в созданный TBitmap, а потом уже грузить его в наш 'myimagestyle'. А самое оптимальное решение - загрузка изображений в "контейнер", в фоновом режиме, а при окончании загрузки, по событию, - отрисовка уже в самом итеме. В любом случае - сначала в битмап, а потом этот битмап в Итем. Иначе, вероятность того что битмап отрисуется в вашем случае - практически нулевая. 4. Далее, при создании итемов: procedure ContactList_AddItem(Sender: TObject); var newItem : TListBoxItem; newBitmap : TBitmap; begin newItem := TListBoxItem.Create(nil); newItem.StyleLooup := 'listboxitemMystyle'; // хотя будет проще не писать этого, а прописать в ListBox1.DefaultItemStyles.ItemStyle newItem.Text := 'текст'; newItem.TagString := тут может быть Ваша ссылка newBitmap := TBitmap.Create; newBitmap.LoadFrom ....... // грузим картинку newItem.TagObject := newBitmap; newItem.OnApplyStyleLookup := MyItemApplyStyle; ListBox1.AddObject(newItem); end; procedure MyItemApplyStyle(Sender: TObject); var LI : TListBoxItem; tmpBitmap : TBitmap; begin LI := Sender as TListBoxItem; if Assigned(LI) then try LI.BeginUpdate; tmpBitmap := LI.TagObject as TBitmap; if Assigned(tmpBitmap) then LI.StylesData['myimagestyle.bitmap'] := tmpBitmap; // тут вообще можно обновлять все что угодно в этом Итеме finally LI.EndUpdate; end; end; Собственно все. Сорри если что не понятно - писал "от руки", без проверки. Но вроде все просто.
  50. 1 балл
    Andrew

    Расчет высоты объекта на основе высоты TLabel

    При работе с Listbox мне приходится использовать RecalcSize. Вообще, для лучшего понимания проблемы вы лучше нарисуйте что хотели бы видеть и что реально получаете.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...