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

Brovin Yaroslav

Администраторы
  • Постов

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

  • Посещение

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

    390

Весь контент Brovin Yaroslav

  1. Поддержки PDF из коробки нету. Однако, для создания вашего pdf документа вы можете попробовать воспользоваться существующими решениями для создания pdf. Например: TMS iCL
  2. Я позже напишу статью, которая пояснит почему так происходит.
  3. Добрый день. По поводу создания собственных эффектов рекомендую к прочтению зарубежную статью How to Create Your Own FireMonkey Image Effect
  4. Заголовок темы об одном, а текст вопроса о другом. Отвечу на заголовок: Поддержки MySQL на андроиде из коробки нету. На андроиде или йос нету поддержки dll. Это чисто Windows технология. А значит логично предположить, что скаченная библиотека на мобильных платформах не поможет и не будет работать. Постскриптум Текст вопроса не соответствует правилам Согласно тем же правилам нужно воспользоваться поиском для поиска вопроса: Возможно ли подключиться к MySQL без DLL на Андроиде? На этом тему я закрываю. На будущее прошу вас лучше ознакомиться с правилами.
  5. Нет. При закрытии главной формы в FireMonkey так же используется вызов Application->Terminate. Поэтому в описанном вами случае принципиальной разницы нет. Она может появится только в том случае, когда вы закрываете не главную форму и хотите при этом завершить выполнение программы. В этом случае нужно использовать Application->Terminate.
  6. Если такая опция и есть, то она скорее всего носит рекомендательный характер для системы, а не обязательный. Например, есть опция largeHeap в манифесте, которая говорит о том, что нужно выделять приложению больше памяти largeHeap. Но официально указано, что нет гарантии ее выполнения. Что в общем и ожидаемо. Так как если на устройстве нет свободной памяти, то больше ее брать не от куда. Тоже касается и этой опции. Так как - это будет потенциальный риск написания вредоносного приложения или сервиса, который будет занимать все ресурсы и не давать ничего загрузить.
  7. Подводные камни могут появиться. И они есть. Самое главное, что нужно знать при разработке на андроиде - это то, что при запуске другого активити, ваше может быть выгружено системой из памяти. И как вы понимаете, следствие, ваше приложение не будет работать, пока его опять не запустят. За выгрузку вашего приложения отвечает сама операционная система. Одной из причин выгрузки может послужить нехватка ресурсов для выполняемого текущего активити. В этом случае Операционная система выгрузит остальные, чтобы освободить ресурсы. Такое поведение например наблюдается на Samsung S3, когда вы из вашего приложения пользуетесь стандартной камерой (системное приложение). На Samsung S3 в этом случае происходила выгрузка приложения, а потом повторный запуск, после завершения работы с камерой. Отсюда следует, что гарантированно управлять по расписанию вашим плеером таким способом не получится. Работать будет только на тех устройствах, которые не выгружают ваше активити. Если это будет работать на одном и том же устройстве, на котором вы проверили работу и на котором не будет работать ничего лишнего, то можно использовать этот способ. Однако, если вы хотите добиться одинаковой работы на любом устройстве, то нужно пользоваться другим подходом. А именно: AlarmManager - специальный системный планировщик Андроид. Который позволяет на системном уровне послать интент любом приложению в указанные моменты времени. Сервис - приложение, которое работает в фоне. Сразу скажу, что использование первого в Delphi требует хорошего понимания, как это работает и что нужно сделать. Примеров нету. У меня пока руки не дошли показать, как с ним работать. Хотя он успешно используется в FMX для эмуляции отложенных уведомлений, которых, как известно нету в Андроиде. На форуме было общее обсуждение этого планировщика тут: RSS reader На счет второго в интернете были зарубежные статьи на эту тему. Но я не углублялся в них. У нас были ссылки на форуме по созданию сервисов Так же на основании этой информации важно извлечь, что в андроид приложении нужно предусмотреть сохранение состояния приложения. Чтобы в случае выгрузки вашего приложения и повторного запуска, вы не потеряли все данные.
  8. Собственно говоря, Android - хоть и linux подобная система, но команда System не распространяется на проигрывание видео в стандартном видео плейeре. Поэтому как правильно заметил konung, проигрывание видео файла в стандартном проигрывателе на платформе Андроид осуществляется при помощи намерений (Intent). uses Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Net, Androidapi.Helpers, FMX.Helpers.Android; {$R *.fmx} procedure PlayVideo(const AFileName: string); var Intent: JIntent; Data: JNet_Uri; begin Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW); Data := StrToJURI(AFileName); Intent.setDataAndType(Data, StringToJString('video/avi')); SharedActivity.startActivity(Intent); end;
  9. Еще можно через StylesData. Но в этом случае вначале идет название (StyleName) внутреннего объекта стиля, а потом через точку название свойства. Вы пытались задать, но не правильно указали название элемента. Если итем лист бокса принимает стиль "listboxitemlabel", то чтобы добраться например до внутреннего объекта icon. Нужно написать так: ListBoxItem.StylesData['icon.width'].asInteger
  10. Тогда прочитайте, пожалуйста, правила форума и добавьте в свой вопрос информацию о устройстве, версии ОС устройства и версии RAD Studio.
  11. Таким образом можно ошибочно посчитать, что любой вопрос в теме Андроид является не отклонением от правил. Если не трудно, заведите отдельным вопросом - вопрос про системные папки - музыка, документы и тд. Чтобы другие смогли быстро найти ответ.
  12. Ошибка вашего кода, не связанная с TComboBox. Под мобильными платформами работает ARC - Автоматический подсчет ссылок. В вашем примере, вы добавляете псевдообъект: TObject(I) При добавлении объекта у него должен увеличиваться счетчик ссылок RefCount (поле объекта). Компилятор автоматически вызывает системный метод TObject: function __ObjAddRef: Integer; virtual; В этом методе идет увеличение внутреннего поля FRefCount. А так как объекта физически не существует, то вы получаете Access Violation.
  13. Эту тему смотрели и предложенные варианты решения: http://fire-monkey.ru/topic/175-nastroika-sredy-dlia-otladki-na-ustroistve/
  14. http://docwiki.embarcadero.com/Libraries/XE5/en/System.IOUtils.TPath P.S. Просьба в будущем на каждый отдельный вопрос заводить отдельную тему. Так как вопрос был вначале об одном, а теперь поменялся на другой. Другим пользователям будет сложно найти на него ответ
  15. Мне кажется, что через обычный MouseMove, MouseDown, MouseUp будет проще. Через них как раз можно определить высоту сдвига. В начале сдвига, на основании ScrollViewPos отображаем стрелку с надписью. В MouseMove следим за величиной сдвига При достижении требуемой величины сдвига, меняем надпись и направление стрелки. При отпускании скрываем надпись, стрелку и отображаем TAniIndicator.
  16. Тут решение простое. Нужно расположить поля ввода в том порядке, чтобы в начале шли поля ввода ниже, а затем выше. Система ищет контрол, который будет получать события мыши проверяя их по порядку с конца. Первый найденный будет получать события. В вашем случае вышло так, что нижнее поле ввода создавался после верхнего. И значит оно будет раньше с конца. При нажатии на точку, первым проверяется последний контрол (нижнее поле ввода) на попадание. Вы действительно попадаете в область и события перехватываются. Если же поменять порядок, то верхнее поле. Проверить можете на прикрепленном примере: EditOrdersDemo.zip То же самое на иллюстрации:
  17. Решение простое, FireMonkey поддерживает специальное свойство TControl.TouchTargetExpansion для расширения логического размера контрола, не меняя его физический размер. Работает это так: При определении контрола, в который нужно транслировать системное событие мыши или жестов, платформа вначале ищет контрол по указанным координатам нажатия. Система опрашивает каждый контрол на попадание нажатия в область контрола. По умолчанию область контрола полностью совпадает с его размерами. TouchTargetExpansion позволяет увеличить эту область на момент определения контрола.
  18. На мобильных платформах вместо курсора используются нажатия пальцем. Поскольку палец имеет больший размер, чем курсор мыши, то возникает ситуация, при которой на телефоне с первого раза тяжело попасть в контрол. Есть ли способ решения этого вопроса? Подробнее о частном случае проблемы тут: Как обойти потерю фокуса ввода близко расположенных TEdit при выделении?
  19. TJSONObject был перемещен в другое место из Data.DBXJSON в System.JSON. Подробнее тут: What's New in Delphi and C++Builder XE6 Работать так же, как и раньше. Просто изменить название подключаемого модуля на System.JSON.
×
×
  • Создать...