• 0
Martifan

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

Вопросы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 ответов на этот вопрос

  • 0

У меня тоже самое (на XE7). Видимо что то подгружается при первом запуске, поэтому и медленно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

У меня под Android при первом открытии тоже есть "скачок". Под iOS нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Возможно ли, таким способом отрисовать анимацию переходов между Табами в TTabControl (SetActiveTabWithTransition)?

Изменено пользователем Brovin Yaroslav

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 5

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

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);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От WinterSun
      Здравствуйте.
      Можно ли сделать так, чтобы ширину MultiView в режиме NavigationPane можно было менять в Design-Time?
      Спасибо.
    • От dmokrushin123
      Перемещаю в приложении для iOS вручную MultiView и явно видны поддергивания экрана.
      Думал в Токио измениться, нет субъективно еще хуже стало. 
      В приложениях написанных нативно, например kazpost, fortebank, alfabank, с этим проблем нет, все работает плавно.
      Да во второй половине экрана находиться Layout и в нем tabcontrol c другими элементами.
       
    • От Евгений Корепов
      Починили TMultiView.Enable в Tokyo, вот небольшой видео-пример:
      https://www.youtube.com/watch?v=T0gJwfiyRyY
    • От Steepe_Hare
      Когда устанавливаем Mode = NavigationPane.
      Тоже самое же можно сделать, кинув тулбар с кнопкой и под ним две панели. По нажатию кнопки LeftPanel.Visible := not LeftPanel.Visible;
      Или я чего-то сокровенного не понял?
    • От Alex924
      В качестве masterbutton использую кнопку, но есть такая проблема что подпись у SpeedButton вылезает за края TMultiView когда оно в свёрнутом состоянии, мне нужно чтобы в свёрнутом состоянии были видны только картинки у кнопок, а в развёрнутом был виден ещё и текст

    • От Равиль Зарипов (ZuBy)
      Доработал чуть CustomPresentation из демо
       
      1) убрал баг с утечкой памяти
      было так с включенным ReportMemoryLeaksOnShutdown := true;

       
      2) неточное отображение на форме, не по центру
      было

      стало

       
      3) при открытой MV закрыть программу, утечка памяти ReportMemoryLeaksOnShutdown := true;
       
      4) Добавил события OnShown, OnHidden
       
      MultiView.zip
    • От ivadimos
      Каким образом можно изменить цвет фона в TMultiView?
    • От krapotkin
      Новая особенность MultiView 
      MasterButton работает только в случае, если лежит в одном и том же контейнере, что и MultiView
       
      у меня была раскладка - Тулбар, Align = Top
      TLayout Align = Client
      в Layout помещен MultiView и TPanel - TargetControl
      кнопка на тулбаре установлена как MasterButton
      в XE8.1 она работала, в DX10 перестала
      всю голову сломал, пока догадался тулбар сунуть в панель
    • От krapotkin
      XE8 Upd1
      форма с мульти-вью
      наверху - TToolBar
      в шторке - комбо-бокс
      черное поле - панель, в которую загружаются фреймы в зависимости от выбора в комбо
      применен стиль*

       
      когда шторка выезжает, она почему-то захватывает пространство тул-бара, ну да бог с ним, не страшно

       
      хуже то, что когда она вернулась, тулбар остался изгажен

       
      я пробовал toolbar.Repaint, toolbar.RecalcSize, multiView.RecalcSize
      не помогло
      Как исправить?
       
      *если убрать стили, поведение не меняется
    • От estra
      На форме 2 метки:
       

       
      Верхняя - FactoryIDCaption (Заводской №)
      Нижняя - FactoryIDValue (90408223)
       
      Нужно чтобы вторая строка (со значением параметра) располагалась после первой (с наименованием параметра) вне зависимости от длины текста в первой метке. У первой метки значение свойства AutoSize = True. И есть такой код
      FactoryIDValue.Position.X := FactoryIDCaption.Position.X + FactoryIDCaption.Width; По идее начало второй метки должно совпадать с концом первой метки, но на практике это не так. Где я ошибся и как эту ошибку исправить?
       
      P.S.
      Речь идет про Android, на Windows все работает правильно.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу