Jump to content
View in the app

A better way to browse. Learn more.

FGX Native

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
  • Status: Reported
  • Priority: Normal
  • Resolution: Unresolved
  • Platform: Android
  • Affects version 1.18.14.1

Либо я неправильно пытаюсь её применить. В прицепе примитивный пример. В константу START_CARD подставляем номер карточки, к которой хотим, чтобы прокрутился скроллбокс (по 10 карточек на 3-х страницах: номера 1-10, 11-20, 21-30) и запускаем. Страница со скроллбоксом выбирается правильно, но к нужной карте не скроллится

scrollboxscrollto.zip

User Feedback

Recommended Comments

  • Administrators

Добрый вечер,

Применяете верно. Но есть один нюанс. Это вызов данного метода из события TfgForm.OnShow. Нюанс заключается в том, что реальное выравнивание формы и всех компонентов приходит асинхронно позже. Поэтому вызов ScrollTo строится с учетом еще не актуальных размеров компонентов. Таким образом скроллбокс рассчитывает смещения на старой высоте. Потом приходит выравнивание и получается, что картина меняется.

Решение, это сделать отложенный скрол. Например так:

procedure TFormMain.fgFormShow(Sender: TObject);
begin
  TThread.ForceQueue(nil, procedure begin
     ShowCardPanel;
  end);
end;

dervish00

Active subscription

Ну честно говоря, в реальной задаче у меня перед этим применяется выравнивание Realign обрамленное BeginUpdate-EndUpdate, но всё равно не срабатывает

  • Administrators
1 hour ago, dervish00 said:

Ну честно говоря, в реальной задаче у меня перед этим применяется выравнивание Realign обрамленное BeginUpdate-EndUpdate, но всё равно не срабатывает

Realign выполняет выравнивание на основании размера контейнера. А я пишу, что у формы, как у контейнера, нет еще актуального размера в OnShow. Поэтому вызов Realign не поможет, он просто вычислит размеры всех вложенных компонентов на основании старого размера формы.

dervish00

Active subscription

Ну не все так просто - я делаю реалигн для изменения размеров контролов перед их показом и всё прекрасно рассчитывается и стоит на своих/нужных местах. Отсюда я делал вывод, что и скрол должен был правильно отработать

dervish00

Active subscription

Да, и попробовал ForceQueue в реальной задаче - не срабатывает всё равно скрол

dervish00

Active subscription

Да и в моём примере тоже этот трюк с форсированием очереди не работает

dervish00

Active subscription

А можно как-то вообще глобально решить этот вопрос - не только у меня возникают такие вопросы, по обработке чего-либо в OnShow и где требуется что-то сделать по окончании выравнивания. Какую-нибудь отложенную процедуру запустить по окончании асинхронного процесса или еще как? Или кто-нибудь подскажите лучшие практики для решения подобных вопросов - кто как выходит из положения?

Mineev

Active subscription

У меня тоже периодически возникают такие проблемы. И если в событии OnShow нет актуальных размеров, то зачем это событие вообще нужно?!

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.