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

TScrollBox и динамическое создание компонентов в нем


Mexanik2012pro

Вопрос

Добрый день всем!

Возникла проблема с компонентом TScrollBox на XE7.

На форме лежит компоненты TScrollBox и TButton. И на ScrollBox(e) создаются динамические компоненты TLabel. 

В начале все создает прекрасно (Картинка 1), но потом, когда TLabel создается за пределами TScrollBox получается трэш (Картинка 2) ...

 

//-------------------------------------------------------------------------------------------------------------------------------

static int i = 1;
TLabel *label = new TLabel(this);
label->Parent = ScrollBox1;
label->Text = "Text " + String(i++);
label->Margins->Bottom = 5;
 
label->Align = TAlignLayout::MostBottom; //Что бы компонент перенесло в низ
 
label->Align = TAlignLayout::MostTop; //зачем в верх, до последнего компонента
//-------------------------------------------------------------------------------------------------------------------------------
 
Извиняюсь, если не корректно написал. Но все же, проверте и дайте ответ в чем же проблема.
Если данная тема была, то дайте ссылку на ответ.
 
Данная проблема не только в этом компоненте, но TVertScrollBox & TFramedVertScrollBox.
 
Картинка 1                                                                                                           Картинка 2

post-124-0-24612000-1448802392.png

post-124-0-77952500-1448802392.png

Изменено пользователем Mexanik2012pro
Ссылка на комментарий

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

  • 0

Создавал динамически TImage. Проблем не возникало таких, правда позиционировал через position

Если попробовать изначально задать большой Position. Y, а затем MostTop?

Изменено пользователем Alexander
Ссылка на комментарий
  • 0

Создавал динамически TImage. Проблем не возникало таких, правда позиционировал через position

Если попробовать изначально задать большой Position. Y, а затем MostTop?

 

Спасибо большое ))) Это извращение какое то ...  :lol:

Создал глобальную переменную int pos, для запоминания позиции последнего TLabel. 

 

Вот решение:

//-------------------------------------------------------------------------------------------------------------------------------

int pos = 0; //наша позиция последнего TLabel
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
static int i = 1;
TLabel *label = new TLabel(this);
label->Parent = ScrollBox1;
 
label->Text = "Text " + String(i++);
 
label->Align = TAlignLayout::MostBottom;
label->Align = TAlignLayout::MostTop;
 
label->Position->Y = pos; //заносит нашу позицию
pos = label->Position->Y + label->Height; //сохраняет позицию и размер Height, для след использования
Label1->Text = pos; //выводит позицию последнего TLabel
}

//-------------------------------------------------------------------------------------------------------------------------------

 
Результат на картинка  :)

post-124-0-60128400-1448824492.png

post-124-0-08636500-1448824493.png

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

TScrollBox автоматически сам вычисляет размер контента на основании размещенных в нем элементов. В связи с этим нужно понимать, что любое выравнивание дочернего компонента по нижнему краю носит некий абсурдный характер, несмотря на то, что это не запрещено. Потому что при выравнивании контрола по нижней границе мы отталкивается относительно размера контента, в то же время контент рассчитывает свой размер относительно контрола. Поэтому у вас и получается столь не предсказуемый вариант.

 

Хорошая практика размещать компоненты подряд сверху вниз с выравниванием по верхнему краю. Или же самый лучший вариант - это ручное позиционирование компонентов.

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

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

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