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

Brovin Yaroslav

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

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

  • Посещение

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

    390

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

  1. Давайте тогда еще раз вы озвучите полностью ситуацию использования и ваш вопрос. Так как первоначальный вопрос был про одно и на него был дан ответ. Потом всплыли подробности использования, что вам нужно гарантировать, что форма не закроется в момент работы аниматоров. На нее тоже был дан ответ, что нужно использовать компоненты анимации и при закрытии формы проверять факт запущенных аниматоров. Или закрыть форму после завершения аниматоров в TAnimation.OnFinish. Теперь третий уже вопрос, якобы исходная задача (смотрим на первый вопрос). Отдельно ответ на третий вопрос - можете использовать TForm.PaintRects
  2. Поставьте задержку 100 мсек (или 24 кадров в секунду). Я попробовал это на стандартном виндовом примере MediaPlayerHD и там я не вижу проблемы черного экрана (Даже при интервале таймера в 1 секунду).
  3. Согласно правилам нужен чистый тестовый проект, на котором вы это делаете. Хотя бы потому, что за фразой: может скрываться куча реализаций и способов.
  4. Да, вы правы. При любом блокировании главного потока, будет происходит блокирование обработки сообщений - это базовый принцип работы настольных приложения для многих операционных систем. Анимация не будет дерганной, она просто полностью зависнет на время блокирования потока. Однако, аниматор в FireMonkey не просто изменяет значение через указанные интервалы, а анализирует ситуацию с возможностью блокировки потока, и основывается на текущем времени. То есть, если анимация должна пройти за 4 секунды и началась в 0:00:00, а у вас на 1 секунду заблокировался основной поток, то анимация все равно закончится в 00:00:04. И будет задавать значение свойства таким, каким оно должно быть равно в момент времени t. Поэтому правилом хорошего тона является вынесение тяжелых операций в отдельные потоки. Как это сделать, есть ответ в статье: Фоновое выполнение операции без "замораживания" отрисовки Еще есть более быстрый вариант решения в случаях, когда длительную операцию можно разбить на маленькие итерации, Это форсировать вызов: Application.ProcessMessage; Однако, я не рекомендую этот способ, так как он может привести к другим неприятным последствиям. Так же, когда меняется значение свойства, которое должно привести к перерисовки сцены, автоматически запрашивается от системы перерисовку сцены.
  5. Самый простой вариант реализации воспроизведения аудио/видео по кругу является использование таймера: procedure TFormPlayer.PlayerTimerTimer(Sender: TObject); begin // Выполнять таймер с интервалом 1 секунда if MediaPlayer.State = TMediaState.Stopped then begin MediaPlayer.CurrentTime := 0; MediaPlayer.Play; end; end;
  6. Требуемая версия среды: Выше RAD Studio XE5, включительно Чтобы поменять цвет фона системного статус бара под iOS 7, нужно установить цвет фона у формы, не забыв указать, что мы будем использовать тип кисти Solid. Обратите внимание, что цвет текста выбирается в зависимости от типа цвета. Если цвет фона темный, то для заголовка будет выбран белый контрастный цвет. Иначе черный, что хорошо проиллюстрировано на рисунках ниже: Если нужно, чтобы цвет фона формы не менялся, нужно поместить в корень формы TRectangle, указать ему цвет заливки и отключить отрисовку границы Stroke.Kind = TBrushKind.None;
  7. Не забудьте, пожалуйста, еще прикрепить скриншот, который фиксирует факт, описанного вами поведения.
  8. Еще согласно правилам (Пункт 2.2.5) нужно приложить тестовый чистый проект, на котором это воспроизводится.
  9. Не знаю, как вы создаете итемы (в следующий раз нужно прикреплять тестовый проект, согласно правилам форума). Но у меня работает: Создаю итемы для TListView с дополнительным текстовым полем так: procedure TForm1.Button1Click(Sender: TObject); var Item: TListViewItem; TextObject: TListItemText; I: Integer; begin for I := 0 to 10 do begin Item := ListView1.Items.Add; Item.Text := 'Item ' + I.ToString; TextObject := TListItemText.Create(Item); TextObject.Name := 'SubCaption'; TextObject.PlaceOffset.Point := TPointF.Create(100, 0); TextObject.Font.Size := Random(20) + 5; TextObject.Height := Item.Height; TextObject.Text := 'Sub caption'; end; end; Обновляю размеры под текста и цвет так: procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); var TextObject: TListItemText; begin TextObject := AItem.Objects.FindObject('SubCaption') as TListItemText; if TextObject <> nil then begin TextObject.Font.Size := 20; TextObject.TextColor := TAlphaColorRec.Red; end; end; Результат ниже: Без обновления размера и с кодом коррекции размера и цвета:
  10. Добрый день, TMediaPlayer пока не умеет этого делать. Он работает только с файлами. Поэтому в вашем случае решений здесь может быть два: Использование напрямую API операционной системы для воспроизведения потока. Сохранение потока в файл и потом воспроизведение файла (если в вашем случае это возможно).
  11. Delphi атрибуты не поддерживаются в С++ Builder. Поэтому не получится на уровне одного компонента указать, на каких платформах он будет работать. Однако, есть другой способ указания этого (правда для всех компонентов пакета). При добавлении новой платформы в список целевых платформ пакета, все компоненты пакета считаются полностью рабочими на этих платформах. (после сборки пакета на каждую платформу). Что проиллюстрировано на рисунках ниже: Если у вас пакет содержит компоненты, как рассчитанные на одну платформу, так и на несколько, то я вижу пока только единственных выход - создание отдельных пакетов для таких компонентов.
  12. В данном случае речь идет не просто об ответе на вопрос, а о наборе технических статей, которые будут полностью раскрывать принцип работы того или иного механизма. В этом случае понимание происходящих процессов в FireMonkey сделает прозрачным работу фреймворка.
  13. Добрый день, Ответ на этот вопрос практически полностью совпадает с ответом на вопрос Можно ли уменьшить размер приложения для андроида? с единственным отличием в составе файлов приложения. Спасибо
  14. Для 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. Исходники коммерческих продуктов выкладывать запрещено. Поэтому выше приведено руководство.
  15. Можно проверить двумя способами: Проверить доступность системной командной оболочки Bash Проверить наличие установленного приложения Cydia. uses System.SysUtils, iOSapi.Foundation, MacApi.Helpers; function SharedFileManager: NSFileManager; begin Result := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager); end; function IsBashAccessible: Boolean; var FileBashHandle: THandle; begin FileBashHandle := FileOpen('/bin/bash', fmOpenRead); try Result := FileBashHandle <> INVALID_HANDLE_VALUE; finally FileClose(FileBashHandle); end; end; function IsCydiaInstalled: Boolean; begin Result := SharedFileManager.fileExistsAtPath(StrToNSStr('/Applications/Cydia.app')); end; function IsJailbroken: Boolean; begin {$IF Defined(IOS) AND Defined(CPU386) } Result := False; {$ELSE} Result := IsBashAccessible or IsCydiaInstalled; {$ENDIF} end;
  16. Я не знаю, но постараюсь узнать. Одно могу сказать, что скорее всего возобновим серию вебинаров, посвященных мобильной разработке с FireMonkey.
  17. Места проведения: Минск, Санкт-Петербург, Воронеж Сроки проведения: Минск (27 мая), Санкт-Петербург (5 июня), Воронеж (10 июня) Ссылка на мероприятие: http://www.delphitour.ru/ Регистрация: http://forms.embarcadero.com/EM14Q2RUDeveloperDirectLive Будьте первым, кто увидит и услышит о новых возможностях RAD Studio XE6 — долгожданной версии от компании Embarcadero. На мероприятии вы сможете не только ознакомиться с новыми возможностями, но и своими глазами увидеть, почему комплексная среда RAD Studio XE6 является универсальным решением для разработчика, позволяющим заниматься быстрым созданием приложений, обладающих всем необходимым функционалом по взаимодействию с практически любыми источниками данных и популярными облачными сервисами. Вы узнаете, как с помощью основных новых возможностей RAD Studio XE6: Улучшить свои Windows приложения с помощью новых стилей VCL, меню, компонентов для поддержки работы с датчиками. Расширить существующие Windows приложения для сопряжения с новыми мобильными приложениями; Перевести ваши мобильные приложения на новый уровень с помощью интеграции с облачными BaaS сервисами, включая аутентификацию, Push — уведомлениями и монетизацию приложений с использованием встроенных покупок и рекламы; Разрабатывать Delphi и C++ приложения для Android и переносных гаджетов Кроме этого вы сможете задать все ваши вопросы экспертам, поделиться впечатлениями о продуктах и узнать о планах по дальнейшему развитию портфеля решений компании. Ни один вопрос не останется без внимания!
  18. Чем не устраивает TGrid и TStringGrid, входящий в состав FireMonkey? Начиная с версии XE6 скорости работы TGrid и TStringGrid была значительно увеличена и на текущий момент не зависит от количества отображаемых данных. Так же эти гриды имеют поддержку LiveBinding, что позволяет в дизайнере выводить данные из TDataSet подобных компонентов.
  19. Автор: FMXExpress Тип лицензии: Open Source Ссылка на проект android-object-pascal-wrapper (OpenSource): https://github.com/FMXExpress/android-object-pascal-wrapper Скачать: ZIP
×
×
  • Создать...