Перейти к содержанию

Лидеры


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

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

  1. 5 баллов
    brunnengi

    Android 10 (API уровня 29)

    Здравствуйте. Некоторые пользователи Delphi 10.3 столкнулись с тем что даже при указании SDK 29 в манифесте проекта, при запуске скомпилированного приложения на платформе Android 10 происходило его падение. В августе 30 числа 2020 года было дано решение как пофиксить эту проблему. Переход на версию Delphi 10.4 не для всех является приемлемым решением, по разным причинам, к примеру у кого то платные компоненты и нет возможности обновиться до актуальных версий. Ниже представлен перевод статьи. В конце будет ссылка на оригинал. Приведенное здесь решение нацелено на обновление функции 'dlopen' в файле 'ICU.inc' (он включен в файл 'System.pas'). Вот шаги, необходимые для решения указанной проблемы: Откройте проводник и перейдите в папку по следующему пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source Скопируйте файлы из архива "missing_source_files.zip", который приложен в посту, в папку source из пункта "1" (комментарий от переводчика: в "missing_source_files.zip" лежит папка "rtl" в которой две папки - "posix", "sys". Лично я сделал сначала backup папки rtl из папки source, что и вам советую. Затем скопировал rtl папку из "missing_source_files.zip" и вставил в папку source) Переходим по пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys Открываем файл "ICU.inc" в текстовом редакторе (пожалуйста, сделайте backup файла 'ICU.inc' для пущей безопасности). (комментарий от переводчика: орудовать в этой папке без прав админа не вариант. Поэтому я советую сначала скопировать файл "ICU.inc" куда нибудь в другое место, к примеру в папку Documents и там уже открыть его в том же Блокноте и сделав необходимые изменения сохранить файл и затем уже переместить его в C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys с заменой) В текстовом редакторе надо изменить функцию InitICU: Было вот так: А сделать надо что было вот так: Сохраняем сделанные изменения в файле "ICU.inc" Возвращаемся в проводник и переходим в папку %USERPROFILE% Скопируйте файл "build.bat" из архива "build_script.zip" , который приложен в этому посту в папку из пункта 7. Запустите от имени Администратора файл "build.bat". (Он создаст папку %USERPROFILE%\build в которой будет несколько папок с файлами. Из них нам нужны будут только System.o, но об этом ниже) Возвращаемся в проводник и переходим в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\debug Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\debug в папку из шага 10 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). Теперь переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\release Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\release в папку из шага 12 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\debug Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\debug в папку из шага 14 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\release Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\release в папку из шага 16 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай). На этом всё. Автор данного перевода лично прошел по всем шагам и сделал всё как было сказано, а также протестил на приложении что уже было в PlayMarket'е но не запускалось под Android 10. Я его обновил и запустил как на Android ниже 10, так и на Android 10. ЕСЛИ ВЫ НЕ ДОВЕРЯЕТЕ ПЕРЕВОДУ И/ИЛИ ВЫЛОЖЕННЫМ ФАЙЛАМ, ТО НИЖЕ ДАНА ССЫЛКА НА ОРИГИНАЛ СТАТЬИ // файлы выложенные здесь, взяты с форума где оригинал статьи. Ссылка на оригинал https://quality.embarcadero.com/browse/RSP-27218 Если нет логина, то под споллером скрины экрана с форума ссылки выше: Отдельное спасибо пользователю Stanislau Ihnatovich за сообщение в Telegram о том что есть решение build_script.zipmissing_source_files.zip
  2. 2 балла
    krapotkin

    После обновления на Андроид 6.01

    в Android начиная уже с 6 вы должны запрашивать разрешение на запись в файл у пользователя каждый раз при попытке этой записи пример есть в делфи
  3. 2 балла
    MAD_EVAL

    Альтернатива Google Play

    А убило окончательно аккаунт использование WebView в приложении, в которым был основной контент, мне хотелось попробовать сделать игру на JS и просто подгрузить её в приложение. Всё, вечный бан после этого последовал. Причина - опасная загрузка контента. И вообще с гуглом надо осторожно, акк разраба на вес золота.
  4. 2 балла
    krapotkin

    После обновления на Андроид 6.01

    на всех андроид устройствах нет смысла пользоваться прямым указанием папки доступные программе папки перечислены в class TPath из System.IOUtils.pas пример uses System.IOUtils; fname := TPath.combine(TPath.GetDocumentsPath, 'myfile.txt');
  5. 1 балл
    S:=TNetEncoding.URL.EncodeQuery('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8'); ...и вам вполне подойдет THTTPClient для любых запросов...
  6. 1 балл
    Переделал только немного под себя, чтобы строку в ответ выдавал function TForm1.Get(const ASession: TIdHTTP; const AUrl: string):string; begin result:=ASession.Get(ASession.URL.URLEncode(AUrl)); end;
  7. 1 балл
    попробуй вот так: procedure Get(const ASession: TIdHTTP; const AUrl: string; const AResult: TStringStream); begin ASession.Get(ASession.URL.URLEncode(AUrl), AResult); end; где AUrl - твой урл с параметрами
  8. 1 балл
    slav_z

    Запуск внешнего браузера на IOS

    uses iOSapi.Foundation, FMX.Helpers.iOS, iOSapi.UIKit, Macapi.CoreFoundation, Macapi.Helpers; procedure OpenURL(const URL: string); var _NSUrl: NSURL; begin _NSUrl:=TNSUrl.Wrap(TNSUrl.OCClass.URLWithString(NSStr(URL))); SharedApplication.openUrl(_NSUrl); end;
  9. 1 балл
    В том числе. Также все созданные формы будут удалять не себя а именно form1
  10. 1 балл
    у меня были разницы в формате дат.. при преобразованиях падало.. если у Вас на старте что то с датой.. ищите там
  11. 1 балл
    dnekrasov

    Кто-нибудь щупал TMS Web Core?

    Пробовал я и TMS Web Core и UniGUI, но как по мне - лучше чем Thinfinity VirtualUI нет. И да, реально на всех получаются неплохие веб-приложения на Delphi без знания всех этих новомодных фреймворков.
  12. 1 балл
    krapotkin

    После обновления на Андроид 6.01

    пока не перестанете писать по хардкодному пути, можете не присылать ни apk ни код попробуйте записать в System.IOUtils.TPath.GetSharedDownloadsPath
  13. 1 балл
    Android

    Текстовый компонент с подсветкой синтеза

    какого синтеза?
  14. 1 балл
    Yarpda

    А не сделать ли уроки по стилям FMX for free?

    Заметил что ссылка на уроки по стилям FMX уже не доступна. Как я понял Ярослав не планирует больше продавать эти уроки, т.к. ушел в FGX Native, но по сути там довольно интересный материал (я их проходил в свое время и много раз использовал то, что узнал на них), и раз он уже не продается, может быть сделать доступ к этим урокам бесплатным? Я полагаю это могло бы популяризировать FMX. Там действительно без бутылки видео-уроков не разберешься
  15. 1 балл
    Tumaso

    [Android]RAD10.4.1

    @Ingalime у меня в 10.4.1 sdk лежит в C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.38860.1461 (так инсталлятор установил), соответственно всё лежит там, включая Android SDK Manager в 10.3.3 sdk лежит в C:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs\android-sdk-windows
  16. 1 балл
    krapotkin

    После обновления на Андроид 6.01

    вот почему-то ну не верится и все. наоборот бы я еще мог придумать закрытые порты, фаерволлы и т.д. но мобильные-то блокируют только сайты по списку РПН а тут FTP...
  17. 1 балл
    Tumaso

    После обновления на Андроид 6.01

    а причем тут способ доступа к серверу FTP, если проблема в записи в локальный файл? Кто его знает, какой там у вас код записи. UPD. Может быть проблема и не в записи, а в сетевом доступе. Под отладкой вообще запускали?
  18. 1 балл
    Android

    [Android]Правила публикации в маркете

    By August 3, 2020, new apps must target at least Android 10 (API level 29). By November 2, 2020, all apps that are being updated must target at least Android 10 (API level 29).
  19. 1 балл
    MAD_EVAL

    Альтернатива Google Play

    Как раз я и публиковал на Амазон, примерно 1/10 эффективность от play market была тогда, сейчас ещё меньше. Да, все приложения с маркета улетают при бане.
  20. 1 балл
    Alexander Samosyuk

    Android 10 (API уровня 29)

    Все сделал пошагово, но так и не получилось запустить на Android 10 с SDK 29 в манифесте. Подскажите, где я мог допустить ошибку?
  21. 1 балл
    MAD_EVAL

    Альтернатива Google Play

    Или, например, как я, случайно в длинном описании повторилось одно слово 4 раза. Итог - спам ключевыми словами.
  22. 1 балл
    вообще, чтобы получить HICON, достаточно только этого:
  23. 1 балл
    Да вроде не должно, тут по идее нужно только расширение файла: SHGetFileInfo(PChar(Extension), FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES );
  24. 1 балл
    OnePeople

    каналы Push Notification

    И добавить ncb.setsound
  25. 1 балл
    Android

    Альтернатива Google Play

    при первой публикации приложения указать, что оно бесплатное, а потом сделать платным
  26. 1 балл
    Android

    [Android]Публикация в маркете

    Если стоит эта галочка, то на выходе получается не apk, а aab. Непонятно тогда, откуда вы берет apk.
  27. 1 балл
    GASCHE

    Сократить путь

    Ищите в интернете Copy и LastDelimiter.
  28. 1 балл
    Slym

    Статус доступа к push

    https://stackoverflow.com/questions/46457733/how-to-get-notification-authorization-status-in-swift-3 т.е. както так- писал в блокноте procedure TForm1.FormCreate(Sender: TObject); begin TUNUserNotificationCenter.OCClass.currentNotificationCenter.getNotificationSettingsWithCompletionHandler(OnNotificationSettings); end; procedure TForm1.OnNotificationSettings(NotificationSettings: UNNotificationSettings); begin NotificationSettings.authorizationStatus; end;
  29. 1 балл
    krapotkin

    RadStudio 10.3.3 и эмулятор BlueStacks: проблемы.

    Сама Делфи к любым андроид-эмуляторам, -компиляторам, -утилитам, и вообще всему, что нужно для Андроид-разработки, никакого отношения не имеет. Все это - Google SDK. Этот SDK меняется каждый год. Туда добавляются и пропадают самые разные вещи. В том числе и AVD manager и SDK manager. Полный SDK теперь вообще можно поставить только вместе с Android Studio, и потом в Делфи указать пути к нему. Так что никаких изъятий инструментов мобильной разработки Rad Studio не производит. Далее. В мобильной разработке совершенно не будут работать те подходы, которые применяются на десктопах. Например, упомянутые диалоги открытия и сохранения файлов бессмысленны, если доступа к файловой системе по сути и нет вовсе, как на IOS, или частично и только по специальному разрешению как в Андроид. Поэтому их и нет и не может быть для мобил. На бесплатный TChart тоже я бы не стал возлагать большие надежды. Если честно, вам гораздо проще будет либо самостоятельно нарисовать график на Canvas. либо изготовить некий веб-сервер и с помощью к-нить JS-библиотеки подготовить данные, после чего открыть пользователю страницу с графиком. При этом, до определенного предела вполне работает подход, когда программа пишется на FMX на Win32/64, (с характерными для телефона размерами окна, конечно) отлаживается, а потом время от времени запускается на Android. Я лично так делал. Но там нужно держать в голове серьезные отличия по работе с памятью вследствие ARC - Automatic Reference Counting. И соответственно, писать универсальный код.
  30. 1 балл
    OnePeople

    Biometric Finger Reader on Android Device

    Он работал
  31. 1 балл
    krapotkin

    RadStudio 10.3.3 и эмулятор BlueStacks: проблемы.

    я понимаю, доверия ко мне нет, когда пара статей 2015 года говорит, что все зашибись тогда почитаем Marco Cantu - продакт-менеджера Delphi Posted November 6, 2019 https://en.delphipraxis.net/topic/1920-64bit-testing-hardwareemulation/?do=findComment&comment=15048 As for emulators, the issue is they are mostly Intel-based, so Java apps run fine, but native ones require a ARM emulator like libHoudini (this was an Intel library, but I think they stopped all development since they exit the Android world) Что касается эмуляторов, проблема в том, что они в основном основаны на Intel, поэтому приложения Java работают нормально, но для нативных требуется эмулятор ARM, такой как libHoudini (это была библиотека Intel, но я думаю, что они остановили всю разработку, так как они вышли из мира Android)
  32. 1 балл
    chfamy5499

    Delphi 10.4.1 и Андроид 11

    Android 11 & Delphi 10.4.1 Demo - YouTube https://www.youtube.com/watch?v=IcXUnPH21OA
  33. 1 балл
    Andrey Efimov

    Delphi 10.4.1 и Андроид 11

    К сожалению, статья (перевод), которую вы рекомендуете, опубликована в закрытом разделе (для пользователей с подпиской FGX Native). Человек мог просто не знать/не заметить про особенность, озвученную выше. Вот тут можно прочитать оригинал статьи (на английском): https://quality.embarcadero.com/browse/RSP-27218
  34. 1 балл
    Slym

    Serial port

    я обычно с гуя:
  35. 1 балл
    Светлана, вот как делаю я: procedure TMainClient.ОбновитьДанныеВПотоке begin TThread.CreateAnonymousThread(procedure () begin TThread.Synchronize (nil, //Из потока обращаемся к контролам только через главгый поток procedure () begin Показываем котролы запускаем мультик end); Выполняем обработку данных без использования визуальных элементов TThread.Synchronize(nil, procedure () begin Выполняем остановку мультика скрываем контролы end); end).Start; end;
  36. 1 балл
    Все тоже самое что и VLC, только чуток по другому: procedure TForm1.FillListView; var AItem : TListViewItem; begin AItem :=Listview.Items.Add; AItem.Data['Text1']:='Яблоки';//товар AItem.Data['Cost']:=100;//цена AItem :=Listview.Items.Add; AItem.Data['Text1']:='Груши';//товар AItem.Data['Cost']:=120;//цена AItem :=Listview.Items.Add; AItem.Data['Text1']:='Дыни';//товар AItem.Data['Cost']:=80;//ценаend; end; procedure TForm1.ProcessingListView; var I : Integer; AItem : TListViewItem; ASum : Currency; begin ASum:=0; for I := 0 to ListView.Items.Count - 1 do begin AItem:=(ListView.Items.Item[I] as TListViewItem); ASum:=ASum + AItem.Data['Cost'].AsCurrency; end; Label1.Text:=CurrToStr(ASum); end; Обратите внимание - цену присваиваем как число, а не как строку (не за чем лишние преобразования делать) AItem.Data['Cost']:=120;//цена Вторую процедуру можно было без AItem : TListViewItem; сделать, но для наглядности я сделал именно так.
  37. 1 балл
    Zyablik3000

    Компонент - наследник TPresentedScrollBox

    Всем спасибо) Решение нашел сам. Прочитав http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-1-ru/ и другие материалы с этой странички (к слову: жутко полезная информация) перекрыл в своем компоненте функцию function DefinePresentationName: string; override; function TScrBox.DefinePresentationName: string; begin Result:='PresentedScrollBox-style'; end; Дело оказалось в том, что не загружалась презентация для моего компонента (а модель создавалась), точнее пыталась загрузиться презентация 'ScrBox-style', прокси для которой не зарегистрирован. Ведь имя презентации формировалось как 'Имя класса' + '-style' Но этого оказалось недостаточно. Еще понадобилось задать свойство StyleLookup:='scrollboxstyle'; т.к. скроллбары и прочие контролы берутся из стиля TStyledCustomScrollBox'а, который описан в FMX.ScrollBox.Style. Надеюсь кому-то поможет, и этот кто-то не будет как я тратить на решение этой задачи три дня жизни. Test.7z
  38. 1 балл
    FREEFAR

    #13#10 Не убрать перенос строки на Android

    Попробуй заменить slinebreak на нужный символ. В твоём случае на пробел вроде
  39. 1 балл
    Andrey Efimov

    Не запускается служба

    Значит вы не правильно собрали приложение. Этот apk файл собран в "RAD Studio 10.2 Tokyo Release 2 (без фиксов)" только что и протестирован на Андроид 4.4.2 (что под рукой было...).
  40. 1 балл
    Добрый день, Забыли про StyledSettings. Итого весь код по поиску SearchBox и изменении цвета текста: function FindSearchBox(const ARootControl: TControl): TSearchBox; var Child: TControl; begin Result := nil; for Child in ARootControl.Controls do if Child is TSearchBox then Exit(TSearchBox(Child)); end; procedure TForm15.Button1Click(Sender: TObject); var SearchBox: TSearchBox; begin SearchBox := FindSearchBox(ListView1); if SearchBox <> nil then begin SearchBox.TextSettings.FontColor := TAlphaColorRec.Red; SearchBox.StyledSettings := SearchBox.StyledSettings - [TStyledSetting.FontColor]; end; end;
  41. 1 балл
    Используй Helper uses FMX.SearchBox; type TListViewMyHelper = class helper for TListView public function SearshBox: TSearchBox; end; { TListViewMyHelper } function TListViewMyHelper.SearshBox: TSearchBox; var AIdx: Integer; begin for AIdx := 0 to Self.ComponentCount - 1 do if Self.Components[AIdx] is TSearchBox then begin Result := TSearchBox(Self.Components[AIdx]); Break; end; end; Или просто функцию function SearshBox(AListView: TListView): TSearchBox; var AIdx: Integer; begin for AIdx := 0 to AListView.ComponentCount - 1 do if AListView.Components[AIdx] is TSearchBox then begin Result := TSearchBox(AListView.Components[AIdx]); Break; end; end; Primer.zip
  42. 1 балл
    Brovin Yaroslav

    [Windows] Как получить HWND Application?

    Для RAD Studio XE7 Начиная с RAD Studio XE7 Доступ к хендлу приложения можно получить так FMX.Platform.Win.ApplicationHWND Для версий < XE7 Для всех, у кого среда <= XE6 делаем следующее: Открываем исходный файл FMX.Platform.Win.pas (Предполагаемое место расположения файла "/Program Files(x86)/Embarcadero/Studio/14.0/Source/fmx/") В секцию interface модуля объявляем функцию: function ApplicationHWND: HWND; В секцию implementation модуля добавляем ее реализацию (лучше в конец модуля либо после объявления глобальной переменной PlatformWin): function ApplicationHWND: HWND; begin if PlatformWin <> nil then Result := PlatformWin.GetApplicationHWND else Result := 0; end; Добавляем модифицированный файл FMX.Platform.Win.pas в ваш проект. P.S. Исходники коммерческих продуктов выкладывать запрещено. Поэтому выше приведено руководство.
  43. 1 балл
    Есть такое дело. Поэтому как временное решение: Используете дизайнер стилей на обычной форме Потом сохраняете готовый стиль в файл Загружается стиль из файла в TStyleBook в дата модуле.
  44. 1 балл
    Русский За управление виртуальной клавиатурой в FireMonkey отвечает сервис IFMXVirtualKeyboardService (Embarcadero Doc Wiki). Который позволяет отображать и скрывать клавиатуру. Для скрытия клавиатуры достаточно выполнить следующий код: uses FMX.Platform, FMX.VirtualKeyboard; procedure TForm5.ButtonHideKeybordClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.HideVirtualKeyboard; end; Чтобы показать клавиатуру для контрола: procedure TForm5.ButtonShowKeyboardClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.ShowVirtualKeyboard(Edit1); end; English FireMonkey has special service for managing Virtual Keyboard. It is IFMXVirtualKeyboardService (Embarcadero Doc Wiki). It allows show and hide keyboard. For showing virtual keyboard use next code: uses FMX.Platform, FMX.VirtualKeyboard; procedure TForm5.ButtonHideKeybordClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Request service of visrtual keyboard if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.HideVirtualKeyboard; end; For showing virtual keyboard for control: procedure TForm5.ButtonShowKeyboardClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Request service of visrtual keyboard if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.ShowVirtualKeyboard(Edit1); end;
  45. 0 баллов
    Я немного не понял зачем вы мне привели стоимость? В какой из приведённых Вами лицензий работает отладчик для IOS? Я говорю-то совсем о другом. Я говорю о том, что деньги есть. И да. Если я буду заниматься покупкой, я детально разберусь какую лицензию купить. Я поэтому и заложил в бюджет достаточную сумму, чтобы себя не ограничивать. (разница в курсе не в счет) Но учитывая, что в этом ПО нет ключевой для меня функциональности, зачем мне его вообще покупать, даже за дешево?
  46. 0 баллов
    Letter

    Сократить путь

    Подскажите как сократить путь? Например при System.IOUtils.TPath.GetDownloadsPath выдаст такой путь " /storage/emulated/0/Download " и нужно его сократить до "/storage/emulated/0 "
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...