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

Maka

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

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

  • Посещение

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

    4

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

  1. Ситуация такая. Я хочу отобразит некий фрейм с кучей компонентов с использованием плавного проявления (анимация свойства Opacity) Если анимировать на прямую, то объекты фрейма проявляются не равномерно, и вообще выглядит не красиво. Выход: Сделать скриншот фрейма, плавно и красиво его показать, потом скрыть и на его место поместить целевой фрейм. Скриншот делаю с помощью MakeScreenshot. Однако в результате получаю картинку фрейма на момент последнего появления на экране, а если он еще не был отрисован, то пустую картинку. Но ведь мне надо снять сриншот до отрисовки. Пробовал делать MakeScreenshot в событии onPaint фрейма, и там же его скрыть сразу. Действует, но периодически получается моргание, из-за того, что фрейм все же на долю секунды появляется на экране. Пробовал делать Repaint рекурсивно для фрейма и всех дочерних элементов перед снятием скриншота: procedure Repchild(aCtr: TControl); var xA: SmallInt; begin aCtr.Repaint; for xA := 0 to aCtr.ChildrenCount - 1 do if aCtr.Children[xA] is TControl then Repchild(Tcontrol(aCtr.Children[xA])); end; без результатно. Подскажите, как отрисовать TContro без вывода на экран?
  2. Спасибо, то что нужно.
  3. Для анимации плавного появления тяжелого окна использую плавное появление предварительно сделанного с него скриншота Код получения скриншота: function Screenshot(ACntrl: TControl): TBitmap; var SourceRect: TRectF; begin SourceRect := TRectF.Create(0, 0, ACntrl.Width, ACntrl.Height); Result := TBitmap.Create(Round(SourceRect.Width), Round(SourceRect.Height)); if Result.Canvas.BeginScene then try ACntrl.PaintTo(Result.Canvas, SourceRect); finally Result.Canvas.EndScene; end; end; В Windows все нормально, а вот в Android результат получается нечетким (по всей видимости из-за использования какой-то компрессии). Подскажите как повысить качество картинки?
  4. Спасибо, однако даже в теории не могу понять как это может помочь. Насколько я понимаю, причина лежит в тяжеловесности компонента TMediaPlayer и в том, что перед воспроизведением он выполняет некую долгую инициализацию. А то что мы эту инициализацию делегируем в отдельный поток, ее никак не уменьшает. И тем не менее, попробовал. Ожидаемо без положительного эффекта. Мне кажется ключ должен быть, как заметил Евгений Корепов, в альтернативном способе воспроизведения. Вот только куда смотреть??
  5. MediaPlayerOK создается только при первом вызове. да, забыл добавить, что речь об Android. А не подскажете как раз под Android более простой метод?
  6. Столкнулся с небольшой проблемой Воспроизвожу звук стандартным Media Player'ом вот так: var MediaPlayerOK: TMediaPlayer; procedure Play_SoundOK; begin if not Assigned(MediaPlayerOK) then begin MediaPlayerOK := TMediaPlayer.Create(nil); MediaPlayerOK.FileName := System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, 'ok-3.3gp'); end; MediaPlayerOK.CurrentTime := 0; MediaPlayerOK.Play; end; Воспроизведение запускается с ощутимой задержкой (сотни мс). Если файл длинный и воспроизводится 1 раз - то это незаметно, но если это, например, звук, воспроизводящийся при нажатии какой-то объект, и это происходит часто, то это очень бросается в глаза. Как коллеги решают подобную проблему?
  7. Разобрался. Удаляем компонент, сохраняем проект, удаляем руками из файла *.fmx запись об удаленном компоненте, которая там по какой то причине осталась
  8. В процессе написания приложения столкнулся с тем, что после активного использования, некоторые визуальные компоненты (причем это не зависит от их типа, может быть простой Button) не получается удалить в IDE (просто по Ctrl+Del) Вернее удалить то получается, но после этого программа перестает запускаться под Android. (после начальной заставки молча закрыватется), хотя под Windows все работает. Откатываем удаление и все снова запускается. Причем у компонента убрал все обработки событий, в коде он нигде не фигурирует, стили не использует. Подскажите, куда копать?
×
×
  • Создать...