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

Martifan

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

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

  • Посещение

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

    16

Весь контент Martifan

  1. TJSONObject* arr1Object = static_cast<TJSONObject*>(arr1->Get(0)); TJSONArray* arr2 = static_cast<TJSONArray*>(arr1Object->GetValue(_D("arr2"))); for (int i = 0; i < arr2->Count; i++) { TJSONObject* arr2Object = static_cast<TJSONObject*>(arr2->Get(i)); String id = arr2Object->GetValue(_D("ID"))->Value(); String value = arr2Object->GetValue(_D("value"))->Value(); }
  2. таких же долбаебов как ты появляется офтопики не принимай как оскравление просто это твоя судьба и не пиши больше хватит офтопить пост
  3. @Tumaso:)))))))))))))) начнем с того что не тебе решать каким ответом тут место не все такие "умные" как ты я еще раз задам вопрос для тех кто в танке в чем ошибка? то что сгенерировал чат бот? еще раз повторюсь я стараюсь помочь человека отличие от тебя, неужели своё время не жалко сидеть и строчить всякую ерунду? можешь помочь человеку помоги, а так никому тут не интересует твой мнении особенно про чат бот. так что успокойся и не пиши не по тему больше научись ценить свое и чужого времени, в жизни пригодится:)
  4. @Tumaso Собственно чем вас не устраивают ответы чат-бота? Или что-то ошибочно? в отличии от вас, я пытаюсь помочь человеку, если вы тоже можете сгенерировать ответ, почему бы вам этого не сделать? ведь для того и форум, чтобы помочь
  5. FireMonkey - это фреймворк разработки кросс-платформенных приложений на Delphi и C++Builder. В отличие от VCL (Visual Component Library), который тесно интегрирован с WinAPI, FireMonkey разработан для работы с различными платформами, и поэтому он не всегда корректно обрабатывает некоторые функции WinAPI. WM_SYSCOMMAND - это сообщение WinAPI, которое посылается при выборе команды из системного меню окна. SC_CLOSE, SC_MINIMIZE, SC_MAXIMIZE и SC_RESTORE - это параметры, которые соответствуют командам закрытия, минимизации, максимизации и восстановления окна. Но поскольку FireMonkey обеспечивает кросс-платформенность и не привязан к WinAPI, он может не корректно обрабатывать такие сообщения. Поэтому, когда вы отправляете эти команды с помощью SendMessage, они могут не вызывать ожидаемого поведения. По этой причине, для работы с окнами в FireMonkey, лучше использовать встроенные функции и методы фреймворка. Например, для закрытия формы вы можете использовать метод Close, для минимизации и максимизации - свойства WindowState. Если вам необходимо управлять окном на более низком уровне, возможно, вам придется обратиться к платформо-зависимому коду, используя условные директивы компиляции ({$IFDEF}), чтобы разделить код Windows и код для других платформ. Однако в большинстве случаев этого следует избегать, чтобы сохранить кросс-платформенность вашего приложения.
  6. Скорее всего, увеличение размера исходного кода произошло из-за следующих причин: 1. Разница в размере типов PChar и PAnsiChar. В Delphi 2009 и более поздних версиях PChar был заменен на PAnsiChar для совместимости с Unicode. Размер PAnsiChar в 2 раза больше чем PChar. 2. Автоматическая конвертация строковых литералов в Unicode. В новых версиях Delphi строковые литералы имеют тип UnicodeString вместо AnsiString. Это также увеличивает размер. 3. Добавление префиксов перед строковыми литералами. Для совместимости с Unicode Delphi автоматически добавляет префиксы перед строками, например 'U', 'L', etc. Это тоже увеличивает размер кода. 4. Выравнивание данных. Компилятор может добавлять выравнивание в памяти для некоторых типов, например для PAnsiChar. 5. Другие изменения в формате объектного кода. Например, более длинные имена классов/методов. Таким образом, переход на новые версии Delphi с Unicode поддержкой может привести к значительному увеличению размера исходного кода из-за несовместимости строк, упаковки данных и других факторов. Это нормальное явление, цена прогресса.
  7. Martifan

    Отстилить TGrid

    Если вы используете FireMonkey в Delphi или C++ Builder, чтобы настроить внешний вид TGrid, вам потребуется использовать механизм стилей FireMonkey. Стили FireMonkey позволяют настраивать внешний вид каждого элемента интерфейса, включая TGrid. Ниже представлены некоторые шаги, которые вы можете предпринять для кастомизации TGrid: Изменение шапки: Откройте Style Designer для вашего TGrid (щелкните правой кнопкой мыши на компоненте и выберите "Edit Default Style"). Вы увидите дерево стилей с элементом "header", который представляет шапку TGrid. Вы можете изменить его свойства для изменения внешнего вида шапки. Изменение высоты шапки: Высоту шапки можно изменить, изменив свойство Height у элемента "header" в дереве стилей. Изменение размера и положения текста: Размер текста можно изменить, изменив свойство FontSize у элемента "text" в дереве стилей. Положение текста можно изменить, изменив свойства Position и Margin у этого же элемента. Создание резиновых колонок: Создание резиновых колонок, которые автоматически растягиваются на всю ширину TGrid, может быть немного сложнее. Вы можете попытаться реализовать это, установив свойство Align у каждой колонки в значение alClient, но вам придется самостоятельно управлять шириной каждой колонки, чтобы обеспечить их равномерное распределение. Помимо этого, важно убедиться, что вы сохраняете изменения в стилях, иначе они не будут применены к вашему приложению. После внесения изменений в Style Designer, убедитесь, что вы выбрали "Apply and Close" для применения изменений.
  8. К сожалению, в FireMonkey для Windows нет встроенной поддержки для размещения компонентов или рисования на заголовке окна (title bar). Однако, есть несколько возможных вариантов для достижения похожего эффекта: Создать собственный кастомный компонент на основе TControl, который будет перекрывать заголовок окна и имитировать его. Можно нарисовать свой фон, кнопки и т.д. Использовать Windows API функции для настройки и изменения заголовка окна. Например, SetWindowText, SetWindowLong и другие. Это более сложный подход, но дает больше контроля. Рассмотреть сторонние компоненты и библиотеки. Возможно, кто-то уже реализовал похожую функциональность для FireMonkey. Попробовать поместить TControlAboveTarget на TForm и настроить его позицию/размер чтобы перекрывал заголовок. Не идеальный вариант, но может сработать. Так что в целом это возможно реализовать в FireMonkey, но нет встроенного прямого решения как в VCL. Придется поиграться с кастомными компонентами и низкоуровневым API.
  9. К сожалению, вы не можете использовать прямые значения цвета в теге android:drawable. Этот атрибут предназначен для ссылок на ресурсы, а не для прямых значений цвета. Однако вы можете определить свой собственный цвет в ресурсах вашего приложения и ссылаться на него. Для этого выполните следующие шаги: 1. Откройте файл res/values/colors.xml в вашем проекте. Если этот файл не существует, создайте его. 2. В файле colors.xml определите свой собственный цвет, как показано ниже: <?xml version="1.0" encoding="utf-8"?> <resources> <color name="my_custom_color">#0066cc</color> </resources> Теперь вы можете использовать свой пользовательский цвет в файле splash_image_def: <item android:drawable="@color/my_custom_color" /> учтите, что названия ресурсов не должны начинаться с цифры и не должны содержать символов, кроме букв (a-z), цифр (0-9) и подчеркивания (_). Ваш код может выглядеть следующим образом: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/my_custom_color" /> <item> <bitmap android:gravity="center" android:src="@mipmap/ic_launcher" /> </item> </layer-list>
  10. При возникновении ошибки при разработке приложения на Delphi для Android, несколько шагов и рекомендаций могут помочь в решении проблемы: Проверка настроек SDK и NDK: Убедитесь, что пути к SDK, NDK и Java корректно установлены в настройках Delphi. Проверьте также, что версии SDK и NDK совместимы с версией Delphi, которую вы используете. Проверка журнала ошибок: Внимательно изучите сообщения об ошибках. Если ошибка связана с Java, возможно, проблема связана с версией Java. Убедитесь, что вы используете поддерживаемую версию Java. Обновление Delphi: Если вы используете старую версию Delphi, рассмотрите возможность обновления до последней версии. Возможно, в новой версии были исправлены ошибки, которые вызывают проблемы. Переустановка компонентов: Возможно, проблема связана с конкретными компонентами, такими как LocationSensor. Попробуйте удалить и заново добавить эти компоненты в проект. Проверка разрешений: Убедитесь, что ваше приложение имеет все необходимые разрешения на устройстве, особенно если используются функции, такие как доступ к геолокации. Тестирование на разных устройствах и версиях ОС: Протестируйте ваше приложение на различных устройствах и версиях Android, чтобы увидеть, возникает ли проблема только на определенных устройствах или версиях ОС. Обращение к сообществу: Обратитесь за помощью к сообществу разработчиков Delphi. Можете задать вопрос на форумах, таких как Stack Overflow, или присоединиться к группам Delphi в социальных сетях. Воспроизведение в чистом проекте: Попробуйте создать новый проект и пошагово воспроизвести ту же функциональность, чтобы увидеть, на каком шаге возникает ошибка. Проверьте проект на наличие поврежденных файлов: Возможно, файлы проекта повреждены или имеют неправильную конфигурацию. Создание нового проекта и перенос кода может быть полезным шагом. Надеюсь, что хотя бы один из предложенных шагов поможет вам решить вашу проблему.
  11. Для тестирования приложения, написанного на Delphi 10.4 для Android, можно использовать различные инструменты и ресурсы. Реальные устройства: Тестирование на реальных устройствах позволяет вам увидеть, как приложение будет работать в реальных условиях. Используйте устройства с различными характеристиками экрана, версиями ОС и производительностью для более обширного тестирования. Эмуляторы Android: Эмуляторы позволяют вам запускать приложения Android на компьютере. Вы можете настроить эмуляторы с различными размерами экрана, разрешениями и плотностью пикселей. Android Studio: Это официальная среда разработки для Android, и она включает в себя эмулятор Android. Вы можете создать различные виртуальные устройства с разными характеристиками для тестирования вашего приложения. Genymotion: Это еще одна популярная среда для эмуляции Android-устройств. Она предлагает некоторые функции, которые могут быть полезны для разработчиков, такие как встроенные инструменты для тестирования GPS и акселерометра. Сервисы облачного тестирования: Если вы не хотите заниматься настройкой эмуляторов или не имеете доступа к множеству реальных устройств, вы можете воспользоваться сервисами облачного тестирования. Firebase Test Lab: Это услуга от Google, которая позволяет вам тестировать ваше приложение на реальных устройствах, хостед в облаке Google. AWS Device Farm: Это услуга от Amazon, которая позволяет вам тестировать и взаимодействовать с вашим Android-приложением на множестве реальных устройств. При тестировании приложения уделите внимание таким аспектам как адаптивный дизайн, работоспособность на различных версиях ОС и корректность работы функционала.
  12. В Delphi для усиления звука записи можно воспользоваться классом TAudioCaptureDevice и его свойством Volume. Это свойство позволяет установить уровень громкости для записи звука. Чем выше значение Volume, тем громче будет записанный звук. Вот пример, как можно использовать свойство Volume: uses FMX.AudioCapture, System.SysUtils; procedure RecordAudio(const AFileName: string; const AVolume: Single); var AudioCapture: TAudioCaptureDevice; begin AudioCapture := TAudioCaptureDevice.Create(nil); try AudioCapture.FileName := AFileName; AudioCapture.PauseLength := 0; AudioCapture.Volume := AVolume; // Установка уровня громкости AudioCapture.Active := True; Sleep(5000); // Запись в течение 5 секунд AudioCapture.Active := False; finally AudioCapture.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin // Задайте путь и имя файла, в который будет сохранен звук // Укажите значение громкости от 0 до 1 (например, 0.5 для половины максимальной громкости) RecordAudio('/sdcard/MyRecording.wav', 0.8); ShowMessage('Запись завершена.'); end; В этом примере в процедуре RecordAudio добавлен дополнительный параметр AVolume, который позволяет задать уровень громкости записи. Значение AVolume должно быть в диапазоне от 0 до 1, где 0 соответствует минимальной громкости, а 1 - максимальной. Вы можете экспериментировать с различными значениями AVolume, чтобы найти наиболее подходящий уровень усиления звука для вашего приложения и устройства.
  13. Ваши проблемы с анимацией могут быть связаны с несколькими вещами. Во-первых, стоит отметить, что метод AnimateFloatWait помечен как устаревший, и рекомендуется использовать Ani.TAnimator вместо него. Ani.TAnimator.AnimateFloat создает и запускает объект TFloatAnimation. Он устанавливает свойства анимации и начинает анимацию. Однако стоит заметить, что если объект не видим в момент вызова этого метода, анимация не запускается: анимация создается, но не выполняется. Вторым фактором может быть то, как Android обрабатывает анимацию. Android может иметь разные характеристики производительности и отображения, которые влияют на то, как анимация выполняется на устройстве. Также, есть пример использования анимации в Delphi для Android, который может быть полезен. Get access to over 100 FireMonkey cross platform samples for Android, IOS, OSX, Windows, and Linux! Следовательно, я бы посоветовал начать с применения Ani.TAnimator.AnimateFloat вместо AnimateFloatWait, и убедиться, что объект, который вы пытаетесь анимировать, видим на экране во время начала анимации. Если проблема продолжает сохраняться, вам может потребоваться более детальное исследование спецификаций Android и как он обрабатывает анимацию в Delphi.
  14. Name Query NB (NetBIOS) - это протокол, используемый в сетях Windows для разрешения имен сетевых узлов. NetBIOS (Network Basic Input/Output System) представляет собой программный интерфейс, который позволяет компьютерам в локальной сети общаться друг с другом. Он был создан в 1980-х годах и до сих пор используется в некоторых сетях Windows. Если ваше приложение, работающее под управлением Android, вызывает исключение UnknownHostException, это может быть связано с тем, что Android, как правило, не поддерживает протокол NetBIOS из коробки. В то время как в Windows эта функция встроена, в системе Android для ее работы может потребоваться дополнительная библиотека или служба. Если вы должны использовать NetBIOS в своем приложении Android, вам придется найти способ включить эту поддержку, что может включать в себя использование сторонней библиотеки, которая поддерживает протокол NetBIOS, или применение специфической для Android реализации сетевого взаимодействия. Однако важно помнить, что использование протокола NetBIOS может вызывать проблемы с безопасностью и совместимостью, поскольку он устарел и больше не рекомендуется для использования в современных сетевых средах.
  15. Есть несколько возможных причин для вашей проблемы. Самая вероятная причина - это различие в том, как системы Android и Windows обрабатывают локальные имена хостов. 1. DNS и DHCP: Имена хостов, которые работают в вашей локальной сети, обычно разрешаются через DHCP и DNS, работающие на вашем маршрутизаторе или другом устройстве сети. Android может не иметь доступа к этой информации или может обрабатывать её по-другому. 2. Сетевая изоляция: Android может изолировать приложения от локальной сети для улучшения безопасности. Это может препятствовать разрешению локальных имен хостов. 3. Конфигурация приложения: Ваше приложение может требовать определенных разрешений для доступа к сети, которые должны быть указаны в файле манифеста приложения Android. 4. Сервисы Android: В зависимости от версии Android и/или конфигурации устройства, некоторые службы, такие как mDNS, могут быть отключены или недоступны. Ваша задача может включать в себя решение этих проблем или поиск альтернативного решения, которое работает как на Android, так и на Windows. Например, вместо использования имени хоста "Comp0" вы могли бы использовать IP-адрес напрямую (если он статический), или вы могли бы реализовать некоторую форму обнаружения служб в вашем приложении, чтобы найти нужный хост в вашей сети.
  16. Когда вы говорите, что приложения на Андроиде весят 400КБ и используют библиотеки Java размером 2ГБ, вы, по-видимому, имеете в виду разницу между размером исполняемого файла приложения и размером всех библиотек, которые оно может использовать во время выполнения. Современные фреймворки, такие как Java для Android или .NET, часто используют большое количество библиотек, которые содержат общий код, используемый многими приложениями. Эти библиотеки обычно устанавливаются один раз и затем используются множеством приложений, поэтому их размер не влияет на размер каждого отдельного приложения. С другой стороны, приложения, созданные с использованием Delphi, обычно компилируются в нативный код и включают в себя все необходимые библиотеки и зависимости. Это может привести к тому, что исполняемые файлы будут больше, чем если бы они использовали общие библиотеки, но они не зависят от установленных библиотек времени выполнения. С точки зрения конечного пользователя, размер приложения часто не является ключевым фактором, особенно с учетом того, что современные устройства имеют большое количество памяти. Однако для разработчиков может быть важно минимизировать размер приложения, чтобы сократить время загрузки и уменьшить использование ресурсов. В итоге, вопрос "маленькие или большие приложения" зависит от контекста и требований конкретного приложения. В некоторых случаях использование общих библиотек может быть выгодно, в других - предпочтительнее иметь самодостаточное приложение с включенными в него всеми необходимыми библиотеками.
  17. В контексте Delphi, вы можете использовать Indy компоненты для этого. TIdStack имеет метод ResolveHost() который может быть использован для разрешения имени хоста. var GStack: TIdStack; begin GStack := TIdStack.Create; try ShowMessage(GStack.ResolveHost('localhost', Id_IPv4).ToString); finally GStack.Free; end; end; Учтите, что разрешение имени хоста в IP-адрес не гарантирует, что хост будет доступен для подключения. Если имя хоста не может быть разрешено, будет вызвано исключение UnknownHostException. Также обратите внимание, что операции с сетью, такие как разрешение имени хоста, могут быть медленными, и рекомендуется выполнять их в фоновом потоке, чтобы не блокировать главный поток приложения. По поводу вашей проблемы с локальной сетью - возможно, имя хоста, которое вы пытаетесь разрешить, не зарегистрировано в локальном DNS. В этом случае, вы можете попробовать использовать полное доменное имя (FQDN) хоста, или использовать прямой IP-адрес, если он известен. Если метод разрешения имен не работает для локальной сети, вероятно, проблема связана с настройками DNS в вашей локальной сети. Имена хостов в локальной сети обычно разрешаются с помощью механизма DNS, поэтому если ваш DNS сервер или файлы hosts не содержат соответствующих записей для имени хоста, который вы пытаетесь разрешить, то метод разрешения имен вернет ошибку. Если вы контролируете настройки DNS в вашей локальной сети, вы можете добавить соответствующие записи для всех хостов, которые вы хотите разрешать. Кроме того, некоторые системы поддерживают механизмы обнаружения служб на локальной сети, такие как mDNS (Multicast DNS), который используется в протоколе Zeroconf/Bonjour. Если ваши устройства и приложения поддерживают mDNS, вы можете использовать имена хостов с суффиксом .local для разрешения имён в локальной сети. Пожалуйста, учтите, что разрешение имён хостов в IP-адреса - это сложная область, которая зависит от многих факторов, включая конфигурацию вашей сети, настройки DNS, поддержку протоколов обнаружения служб и т.д. Если вы столкнулись с проблемами, вам может потребоваться обратиться к системному администратору или к специалисту по сетям для получения помощи.
  18. Firebase Cloud Messaging (FCM) предоставляет возможность установить приоритет сообщения, но это не гарантирует, что все сообщения будут доставлены в определенном порядке или что все сообщения будут доставлены вообще. Когда устройство находится в режиме отключения от интернета, FCM хранит только последнее сообщение для каждого топика. Это означает, что если вы отправляете три разных уведомления на одно и то же устройство, когда оно отключено от интернета, FCM сохранит только последнее уведомление. Когда устройство снова подключается к интернету, оно получит только это последнее уведомление. Если вам нужно, чтобы все уведомления были доставлены, вам нужно будет реализовать свою собственную систему очереди на стороне клиента. Это может включать в себя сохранение уведомлений в локальной базе данных на устройстве и отображение их в нужном порядке, когда устройство подключается к интернету.
  19. Кажется, вы сталкиваетесь с ошибкой компиляции и несколькими предупреждениями при сборке вашего Android-приложения с использованием Embarcadero RAD Studio. Основная проблема связана с процессом слияния dex, который не удается из-за отсутствия файлов. Отсутствующие файлы .dex.jar: Сообщения об ошибках указывают на то, что несколько файлов .dex.jar отсутствуют в ожидаемом каталоге: c:\program files (x86)\embarcadero\studio\22.0\lib\android\Release К ним относятся следующие файлы: collection-1.0.0.dex.jar core-common-2.0.1.dex.jar core-runtime-2.0.1.dex.jar fragment-1.0.0.dex.jar lifecycle-common-2.0.0.dex.jar lifecycle-livedata-core-2.0.0.dex.jar lifecycle-runtime-2.0.0.dex.jar lifecycle-viewmodel-2.0.0.dex.jar Чтобы решить эту проблему, вам следует: Убедитесь, что вы установили все необходимые библиотеки и компоненты. Проверьте наличие файлов в ожидаемом каталоге. Если файлы находятся в другом каталоге, обновите путь к библиотеке в настройках вашего проекта, чтобы включить правильный каталог. Устаревшие символы и другие предупреждения: Помимо основной проблемы, ваш журнал сборки содержит несколько предупреждений об устаревших символах, неиспользуемых переменных и отсутствующих записях списка USES. Хотя эти предупреждения могут не вызывать сбоя сборки, рекомендуется устранить их, чтобы обеспечить качество кода и возможность его поддержки.
  20. В RAD Studio (Delphi или C++Builder) шаблоны для разных дюймовок экрана обычно определяются с помощью FireMonkey, которая адаптирует пользовательский интерфейс для разных размеров и разрешений экранов. Однако, само приложение не определяет дюймовку экрана напрямую. Вместо этого оно опирается на логическое разрешение экрана (DPI). DPI (dots per inch) - это мера разрешения экрана, которая указывает, сколько точек (пикселей) содержится на одном дюйме экрана. Определение экрана в дюймах происходит с помощью соотношения физического размера экрана и DPI. В случае с вашими двумя телефонами, возможно, что DPI и физический размер экрана вносят различия, которые делают шаблон 7" подходящим для одного из них, даже если фактический размер экрана составляет 6,3". Если вы хотите определить размер экрана в дюймах в приложении RAD Studio, вы можете использовать следующий код: uses FMX.Platform; function GetScreenSizeInches: Single; var ScreenService: IFMXScreenService; ScreenWidth, ScreenHeight, ScreenDiagonalPixels: Single; begin Result := 0; if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then begin ScreenWidth := ScreenService.GetScreenSize.X / ScreenService.GetScreenScale; ScreenHeight := ScreenService.GetScreenSize.Y / ScreenService.GetScreenScale; ScreenDiagonalPixels := Hypot(ScreenWidth, ScreenHeight); Result := ScreenDiagonalPixels / ScreenService.GetScreenPPI; end; end; Этот код вычисляет размер экрана в дюймах, используя FireMonkey Platform Services. Важно отметить, что результат может немного отличаться от фактического размера экрана из-за различий в производстве экранов и возможных ошибок в определении DPI.
  21. Для работы с файлами в современных версиях Delphi я рекомендую использовать классы TStringList или TFileStream. TStringList подходит для работы с текстовыми файлами, а TFileStream для работы с двоичными файлами. Вот пример кода, как выгрузить динамический массив в текстовый файл, используя TStringList: uses Classes, SysUtils; var IndexData: array of array of Integer; IndexFile: TStringList; I, QNum, URes, RAns: Integer; begin SetLength(IndexData, 5, 4); // Задаем размер массива IndexFile := TStringList.Create; try for I := 0 to High(IndexData) do begin // Записываем данные в массив (для примера, используем случайные значения) IndexData[I, 0] := I; IndexData[I, 1] := QNum; IndexData[I, 2] := URes; IndexData[I, 3] := RAns; // Добавляем данные из массива в строку IndexFile IndexFile.Add(IntToStr(IndexData[I, 0]) + ', ' + IntToStr(IndexData[I, 1]) + ', ' + IntToStr(IndexData[I, 2]) + ', ' + IntToStr(IndexData[I, 3])); end; // Сохраняем данные в файл IndexFile.SaveToFile('DB\Index.tmp'); finally IndexFile.Free; end; end. Когда вы используете класс TStringList, вам не нужно заботиться о закрытии файла. TStringList.SaveToFile автоматически закрывает файл после записи. Метод TStringList.Free очищает память, выделенную для объекта.
  22. Вы абсолютно правы. Вот исправленный код для Delphi, чтобы открыть экран настроек конкретного приложения для запроса разрешения на доступ ко всем файлам: uses Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers; procedure RequestAllFilesAccessPermission; var Intent: JIntent; AppPackageName: JString; begin Intent := TJIntent.JavaClass.init; Intent.setAction(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); // Замените 'your.package.name' на имя пакета вашего приложения AppPackageName := StringToJString('your.package.name'); Intent.setData(TJnet_Uri.JavaClass.fromParts(TJString.JavaClass.init(StringToJString('package')), AppPackageName, nil)); TAndroidHelper.Activity.startActivity(Intent); end; Замените 'your.package.name' на имя пакета вашего приложения. Этот код откроет экран настроек вашего приложения для запроса разрешения на доступ ко всем файлам.
  23. Вероятно, модуль Posix.Errno был подключен по ошибке или случайно. Действительно, в коде нет обращения к этому модулю, и он не является необходимым в данном случае. Вы можете удалить его из списка используемых модулей без воздействия на функциональность кода. Моя изначальная ошибка заключается в том, что я не учел особенности синтаксиса и типов данных RAD Studio (Delphi) при написании кода. В RAD Studio тип pthread_t действительно не определен. Вам нужно использовать тип TThreadID из модуля System.Types для совместимости с Delphi: uses Posix.Sched, Posix.Pthread; procedure SetThreadPriority; var Params: sched_param; ThreadId: TThreadID; Res: Integer; begin ThreadId := GetCurrentThreadId(); Params.sched_priority := 10; // устанавливаем приоритет 10 Res := pthread_setschedparam(ThreadId, SCHED_FIFO, Params); if Res <> 0 then raise Exception.CreateFmt('Error setting thread priority: %d', [Res]); end; Моя изначальная ошибка в коде заключается в передаче аргумента Params как указателя. В RAD Studio (Delphi) функция pthread_setschedparam принимает значение, а не указатель на него. Вы можете исправить эту ошибку, передавая Params без оператора адреса (@), как показано в исправленном коде выше.
  24. Да, вы правы. В Delphi, для проверки разрешений, можно использовать PermissionsService с методом IsEveryPermissionGranted. Это позволяет проверить, предоставлены ли все необходимые разрешения для приложения на устройстве пользователя. Пример использования: uses System.Permissions; var Permissions: TArray<string>; PermissionGranted: Boolean; begin Permissions := [TPermission.READ_EXTERNAL_STORAGE, TPermission.WRITE_EXTERNAL_STORAGE]; PermissionGranted := TPermissionsService.IsEveryPermissionGranted(Permissions); if PermissionGranted then // Разрешения предоставлены, продолжаем выполнение else // Запрос разрешений от пользователя end; В этом примере проверяем разрешения на чтение и запись во внешнее хранилище. Если все разрешения предоставлены, приложение может продолжить работу, иначе, можно запросить эти разрешения у пользователя. Однако, стоит отметить, что это применимо для платформы Android, когда вы используете Delphi для разработки приложений под мобильные устройства. В случае с Android, ранее мы использовали ContextCompat для проверки разрешений на доступ. Но с использованием Delphi, это становится неактуальным, так как Delphi предоставляет свою реализацию для проверки разрешений через PermissionsService.
×
×
  • Создать...