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

[TMultiView] Как избежать задержки при первом появлении TMultiView?


Martifan

Вопрос

Здравствуйте.
У меня возникла проблема с TMultiView.
После запуска программы на телефоне при первом открытии компонента, он подвисает и появляется медленно, но во все последующие вызовы этого компонента работает без задержки.
 
P.S. Когда использую анимацию появляется та-же самая проблема.
 
Заранее спасибо.
Ссылка на комментарий

Рекомендуемые сообщения

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

Задержка пропадает, если использовать этот код в TForm.OnShow?

  var
    Buffer: TBitmap;
  begin
    // Draw to Bitmap force to load all styles, measure size, build font-glyphs etc
    Buffer := TBitmap.Create(1, 1);
    try
      Buffer.Canvas.BeginScene;
      try
        MultiView.PaintTo(Buffer.Canvas, Control.LocalRect);
      finally
        Buffer.Canvas.EndScene;
      end;
    finally
      Buffer.DisposeOf;
    end;
Ссылка на комментарий
  • 6
  • Администраторы

Так, я посмотрел. Сохраняем себе такую процедуру:

procedure PreloadContent(const Control: TControl);
var
  I: Integer;
begin
  if Control is TStyledControl then
    TStyledControl(Control).ApplyStyleLookup;
  for I := 0 to Control.ControlsCount - 1 do
    PreloadContent(Control.Controls[I]);
end;

Она форсирует загрузку стилей. Задержка при появлении TMutliView заключается в том, что стиль загружается не сразу у любого контрола, а только по мере появления контрола. Обычно это происходит при первой отрисовки. Это правило касается всех контролов.

 

Поэтому, в этом случае, вам нужно форсировать загрузку стилей. Это можно сделать при помощи моей процедуру PreloadContent.

Добавьте в TForm.OnCreate и это решит задержку при первом появлении:

PreloadContent(MultiView1);
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...