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

Как прокрутить TScrollBox в самый низ?


ruslan

Вопрос

Столкнулся с таким вот "нюансиком".

 

Нужно было программно прокручивать скроллбокс в самый низ.

 

Логично было бы делать так:

ScrollBox1.ScrollBy(0, ScrollBox1.ContentBounds.Height * -1 );

т.е. как бы скроллить вниз на величину равную высоте контента.

 

Результат: скролит вниз, НО не до конца. не "докручивает" примерно пикселей 50-80;

 

В результате родилось вот такое вот "прости господи" решение:

 

TVertScrollBox_Helper = class helper for TVertScrollBox
    procedure Scroll_Down;
end;

procedure TVertScrollBox_Helper.Scroll_Down;
begin
  // здесь vScrollBar.Value = 0, vScrollBar.Max = 4500;
  vScrollBar.Value:= vScrollBar.Max;
  // здесь vScrollBar.Value = 3800, vScrollBar.Max = 4500;
  Application.ProcessMessages; // без этого никак не хочет. т.е. даем скроллбоксу "глюкануть" 
  vScrollBar.Value:= vScrollBar.Value + 100; // поправляем "недостачу"
  // здесь уже все норм
end;

так вот хотелось спросить: это баг, фича, или багофича ?)

 

п.с. может и я олень чегото непонял. обясните пожалуйсто

 

 

 

Ссылка на комментарий

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

  • 0

Ну со скроллингом много чего "интересного"...

Можно поступить разными способами. Для TListBox можно иное решение...

Не знаю пока - как в XE7 с этим, а в Вашем случае:

 

Первый вариант:

ScrollBox1.ScrollBy(0, -MaxY);

Здесь в качестве MaxY можно просто тупо "влупить" некое большое число (типа 10000)....

 

 

Второй вариант:

var
  MaxY : Single;
  I: Integer;
begin
  MaxY := 0;
  with ScrollBox1 do
  for I := 0 to ControlsCount - 1 do
    if Controls[i] is TFmxObject then
      if Controls[i].Position.Y + Controls[i].Height > MaxY then
        MaxY := Controls[i].Position.Y + Controls[i].Height;
  ScrollBox1.ScrollBy(0, -MaxY);
end;

Есть, конечно, и другие варианты... Но это то, что первое в голову пришло "на скорую руку"...

Ссылка на комментарий
  • 0
  • Администраторы

В XE7 мне не удалось воспроизвести вашу ситуацию. TScrollBox прокручивается до самого низа при использовании кода:

  ScrollBox1.ScrollBy(0, -ScrollBox1.ContentBounds.Height);
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...