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

Поиск сообщества

Показаны результаты для 'памяти'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


StackOverflow


Защита от ботов


Город


Интересы

  1. Нужно помнить, что StylesData при запросе значения свойства какого-либо объекта стиля всегда возвращает TValue. Поэтому например в вашем случае вы допускаете сразу две ошибки по одной в каждом варианте: Ошибка 1 Не правильно: ListBoxItem.StylesData['text.width'].asInteger Свойство Width вещественного типа, поэтому при попытке конвертировать TValue в Integer этим способом приведет к ошибке "Invalid class typecast", так как представления вещественного и целого чисел отличаются. Правильно: ListBoxItem.StylesData['text.width'].AsExtended Ошибка 2 Не правильно: ListBoxItem.StylesData['text.text'].asString В этом случае вы пытаетесь представить содержимое TValue, как строка. Но при таком обращении через методы, начинающиеся с приставки "As", идет попытка конвертации чистого значения вещественного числа (указатель в памяти) в строку. Естественно, что такая конвертация пройдет не правильно и закончится все той же ошибкой "Invalid class typecast" Правильно: ListBoxItem.StylesData['text.text'].ToString
  2. Подводные камни могут появиться. И они есть. Самое главное, что нужно знать при разработке на андроиде - это то, что при запуске другого активити, ваше может быть выгружено системой из памяти. И как вы понимаете, следствие, ваше приложение не будет работать, пока его опять не запустят. За выгрузку вашего приложения отвечает сама операционная система. Одной из причин выгрузки может послужить нехватка ресурсов для выполняемого текущего активити. В этом случае Операционная система выгрузит остальные, чтобы освободить ресурсы. Такое поведение например наблюдается на Samsung S3, когда вы из вашего приложения пользуетесь стандартной камерой (системное приложение). На Samsung S3 в этом случае происходила выгрузка приложения, а потом повторный запуск, после завершения работы с камерой. Отсюда следует, что гарантированно управлять по расписанию вашим плеером таким способом не получится. Работать будет только на тех устройствах, которые не выгружают ваше активити. Если это будет работать на одном и том же устройстве, на котором вы проверили работу и на котором не будет работать ничего лишнего, то можно использовать этот способ. Однако, если вы хотите добиться одинаковой работы на любом устройстве, то нужно пользоваться другим подходом. А именно: AlarmManager - специальный системный планировщик Андроид. Который позволяет на системном уровне послать интент любом приложению в указанные моменты времени. Сервис - приложение, которое работает в фоне. Сразу скажу, что использование первого в Delphi требует хорошего понимания, как это работает и что нужно сделать. Примеров нету. У меня пока руки не дошли показать, как с ним работать. Хотя он успешно используется в FMX для эмуляции отложенных уведомлений, которых, как известно нету в Андроиде. На форуме было общее обсуждение этого планировщика тут: RSS reader На счет второго в интернете были зарубежные статьи на эту тему. Но я не углублялся в них. У нас были ссылки на форуме по созданию сервисов Так же на основании этой информации важно извлечь, что в андроид приложении нужно предусмотреть сохранение состояния приложения. Чтобы в случае выгрузки вашего приложения и повторного запуска, вы не потеряли все данные.
  3. Большое спасибо! Видео запускается в том же экземпляре MXPlayer-a. Устройства с Андроид подсоединены к телевизорам, которые весят в ресторане фаст фуда. На телевизорах крутятся видео ролики (реклама-меню и т.п.). Программа просто должна сама менять видео в назначенное время. Сейчас попробовала на своем планшете, вроде видео меняется в том же окне MXPlayer плеера без заметных проблем. Просто думала может есть какие-то не учтенные подводные камни (утечки памяти и т.п.) т.к. смутно представляю пока ОС Андроид.
  4. Для вашей ситуации: Добавляем файл «settings.ini» в «Deployment Manager», в столбце «Remote Path» для нашего файла прописываем путь «.\assets\», после установки приложения на устройство, этот файл будет лежать в папке «/storage/emulated/0/Android/data/<application ID>/files». Получить быстрый доступ к этой папке можно при помощи «TPath.GetSharedDocumentsPath». Соответственно в коде(на Delphi) путь до файла будет выглядеть так: TPath.Combine(TPath.GetSharedDocumentsPath, 'settings.ini'); в случае если вы используете папку отличную от стандартных, т.е. создали папку вручную на карте памяти, то и полный путь до неё придётся прописывать вручную
  5. Прочитайте эту тему на форуме: Включение своих файлов в приложение Для сохранения логов, отладочной информации можно использовать открытые для доступа папки вашего приложения, которые при удалении приложения также удаляются и не оставляют мусора, подробности вы можете найти в этой статье: Deployment Manager или куда ещё можно задеплоить файлы А здесь (в комментариях), я объясняю, почему не стоит создавать папки в корне карты памяти: Обновляем файл базы данных без перезапуска приложения
  6. Добавлена новая версия расширения компонентов FireMonkey. Новый пакет поддерживается только для XE6. Список возможностей: Progress Dialog - Добавлены события OnShow, OnHide. Progress Dialog - Исправлены утечки памяти на Андроид и IOS TfgProgressDialog - Добавлен метод для немедленного сброса прогресса без анимации ResetProgress. TfgActionSheet - Добавлена поддержка действий TAction. Так же теперь можно указать только по одной кнопке деструктивного и отменного типа. TfgColorsPanel - Добавлен новый контрол для выбора цветов из готовых пресетов. Поддерживает следующие наборы цветов: WebSafe, X11. Позволяет указывать свои наборы цветов. TfgGradientEdit - Добавлен новый контрол для задания градиента. TfgLinkedLabel - Добавлен новый контрол - метка со ссылкой. Открывает указанную ссылку в стандартном браузере. Поддерживает все платформы. Добавлены и улучшены примеры каждых контролов. Добавлен набор хелперов И другие улучшения на уровне кода. TfgActivityDialog Работа под iOS: Работа под Андроид (Выше, чем GingerBread 2.3): Работа под Андроид (GingerBread 2.3): TfgProgressDialog Работа под iOS: Работа под Андроид (Выше, чем GingerBread 2.3): Работа под Андроид (GingerBread 2.3): TfgActionSheet TfgColorsPanel TfgLinkedLabel
  7. Пока могу только посоветовать статью "Получаем список доступных устройств хранения информации". Важно: Третий метод будет работать на всех версиях Android до 4.3. С версии 4.3 произошли значительные изменения в организации файлов. К сожалению, у меня нет устройства с Android 4.3 чтобы провести анализ и написать код для версий выше 4.3. И второе, приложения, написанные в Делфи, по какой-то причине, не могут прочитать файл mounts. Я предполагаю, что если бы файл можно было прочитать, то код для версий выше 4.3 основывался на чтении этого файла. UPD (25.11.14). Для Android 4.4.* описано тут: Android 4.4 и запись на внешнюю карту памяти...
  8. Добрый день, Если есть исходники FMX, то посмотрите на реализацию контрола FMX.StdCtrls.TImageControl, не стесняйтесь их изучать. Там как раз аналогичная ситуация, есть встроенный TImage, в который загружается пользовательское изображение. Общие правила такие: Решаем, где будем хранить контейнер для изображения TImage: в стиле или создавать динамически при создании нашего контрола? Любое изображение нужно где-то хранить, вариант с загрузкой по пути не самый удачный на мой взгляд. Так как пути на разных платформах будут разными, да и возникает необходимость разворачивания файлов изображений вместе с пакетом (Deployment Manager - Включение своих файлов в приложение). Единственный плюс при этом - это экономия на памяти и ускорение запуска программы, за счет отложенной загрузки изображения. Это может стать решающей причиной для хранения изображения по пути к файлу со всеми вытекающими. Изображение храним в TBitmap, который создается динамически. Доступ к нему открывается в published секции для работы в DesignTime. В этом случае пользователь сможет загрузить свое изображение в дизайн тайме и при этом оно при сохранении формы автоматически сериализуется в ресурсы формы, а в последующем и восстановится. Осталось настроить загрузку изображения непосредственно в компонент отображения. В нашем случае в TImage. Если TImage создается динамически нашим контролом и не зависит от стиля, то смело грузим картинку из TBitmap в TImage.Bitmap. Если же контейнер загружается из стиля, то грузим картинку в перекрытом методе ApplyStyle, который вызывается, когда стиль загружен для контрола.
  9. Добрый день, FireMonkey вводит специальный метод TFmxObject.Clone, позволяющий выполнить копирование объекта (без внутреннего состояния) и всех его дочерних объектов путем сериализации/десериализации объекта в памяти. Соответственно, чтобы получить копию объекта нужно использовать метод: function TFmxObject.Clone(const AOwner: TComponent): TFmxObject; У этого метода есть важные особенности: Этот метод не копирует родителя Parent у копируемого объекта. Этот метод не копирует обработчики событий. Этот метод не копирует внутреннее состояние объекта. Только если это состояние сериализуется самим объектом. ​Поэтому после выполнения копирования, вы должны задать вручную родителя для копии и требуемые обработчики событий. Так сделано, поскольку в большинстве случаев после копирования для копии задается другой родитель, поэтому чтобы уменьшить количество не нужных операций по выравниванию контролов и тд, задание родителя отводится пользователю.
  10. Чтобы закрыть форму с выгрузкой ее из памяти, нужно сделать следующее: Повесить обработчик на событие формы TForm.OnClose. Установить переданные параметр Action в TCloseAction.caFree procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := TCloseAction.caFree; end; Doc Wiki: Releasing Forms in iOS Apps
  11. Добрый вечер, Тут есть два способа: Работа с Deployment менеджером. Он довольно подробно описан на Embarcadero Doc Wiki: http://docwiki.embarcadero.com/RADStudio/XE5/en/Deployment_Manager Работа через менеджер ресурсов и их получение через ResourceStream. Этот способ описал MyDelphiPw в сообщении выше тут. 1. Deployment Manager Специальная настройка проекта, которая позволяет указать, какие файлы нужно включить в состав пакета (Андроид) или бандла (iOS). Суть его работы простая, вы указываете какие файлы с вашего компьютера нужно перенести на устройство (в какое место). А далее работаете с ними из приложения так, как при обычной работе с файлами под Windows. На мобильных платформах нужно учесть специфику возможных местоположений файла. Пакет/Бандл (приложение) не допускает изменения внутренних файлов, потому что подписывается сертификатом. Поэтому теоретически при изменении файлов приложения, вы нарушаете целостность подписи. Именно по этому файлы внутри пакета/бандла доступны только на ЧТЕНИЕ. Однако, мобильные платформы предлагают широкий круг специальных мест для хранения (временные папки, песочницы, документы, карточка памяти и тд) изменяемых файлов (например файл локальной базы данных, или настройки в ini файле и тд). Описание всех вариантов местоположений с описанием путей есть в записе TPath (RTL): http://docwiki.embarcadero.com/RADStudio/XE5/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms. Общие действия для использования менеджера развертывания такие: 1. Открываем менеджер развертывания: Системное Меню -> Project -> Deployment. 2. Выбираем в верхнем выпадающем меню платформу и конфигурацию сборки. 3. Нажимаем кнопку добавить файл и выбираем нужный файл. 4. Указываем местоположение файла, куда он должен поместиться после развертывания приложения на устройстве. Тут есть особенность, если файл нужен только на чтение, то пути менять не надо. Если возможна ситуация, когда файл может быт изменен, то файл нужно поместить под iOS в Startup\Documents\ (регистр важен) Под Андроид в assets\internal (регистр важен) - для внутреннего доступа из пакета приложения или assets - для внешнего доступа 5. Получаем пути к расположению файлов: Под iOS: TPath.Combine(TPath.GetDocumentsPath, 'filename') Под Андроид: TPath.Combine(TPath.GetDocumentsPath, 'filename') { Внутренний доступ} TPath.Combine(TPath.GetSharedDocumentsPath, 'filename') { Внешний доступ } Полезные ссылки Подробное руководство по добавлению файлов для iOS: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_iOS_App#Loading_and_Deploying_Files Подробное руководство по добавлению файлов для Android: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App#Loading_and_Deploying_Files
×
×
  • Создать...