Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
0 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 8

Свойство Align: Порядок размещения компонентов с одинаковым выравниванием

16.03.2012, 12:01. Показов 6861. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, господа.

Периодически возникает эта проблема, второпях решаю ее ручками с отказом от Align, но в этот раз прижало.

Суть проста: на панель (конкретно, вытянутую в высоту) динамически укладываются компоненты на основе фреймов (TFrame, содержат панель и картинку - в принципе, проверял на TPanelях - эффект тот же), сгруппированные по одинаковому свойству Align (одни - alTop, другие - alBottom). Мне надо, чтобы отображались они в том же порядке, в котором укладывались (то есть свойство Parent приобретало значение), невзирая на изменение размеров и свойств видимости и доступности родительской панели.

Что пробовал:
1) задавать начальные разные смещения - помогает только если компоненты имеют одинаковые размеры.
2) при OnResize родительской панели - отмена выравнивания, ручное изменение привязки (в данном случае по вершине, Top=0), возвращение выравнивания. Действует, но мои фреймики при этом неприятно дергаются, перерисовываясь на новом-старом месте.
3) тоже, что и в п.2, но при OnShow формы. Недостаток - если фреймик из середины списка сделать невидимым, а потом вернуть(такое бывает необходимо) - он будет помещен в конец списка.

Решаема ли проблема? Может, кто знает по какому принципу Align упорядочивает компоненты?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2012, 12:01
Ответы с готовыми решениями:

Свойство align компонента TPanel (50 на 50) - равномерное распределение компонентов на форме
имеется форма, на ней 2 компонента TPanel(верх,низ), как разместить их так, чтобы они занимали одинаковое кол-во пространства на форме....

Не работает свойство align-self
Пытаюсь выровнять блок .header-nav по правому краю с помощью флексбоксов. Вот только align-self: flex-end; его почему-то не равняет, прошу...

Не работает свойство vertical-align!
Вот код: <!DOCTYPE html> <html> <head> <style> .style1{ vertical-align: middle; } ...

2
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.03.2012, 16:58
Цитата Сообщение от Alsys Посмотреть сообщение
Может, кто знает по какому принципу Align упорядочивает компоненты?
Порядок задает сам программист, когда устанавливает свойство. Если хотите поменять переместите левее-правее, ниже-выше компоненты в дизайнере.
Цитата Сообщение от Alsys Посмотреть сообщение
Действует, но мои фреймики при этом неприятно дергаются, перерисовываясь на новом-старом месте.
Вопросы мерцания снять не обещаю (DoubleBuffered = true), но есть у компонентов еще такое свойство как Anchors. По умолчанию используется только Left и Top, но если установить еще, к примеру, Bottom, то при изменении размера формы, компонент будет растягиваться в низ. А если оставить только Bottom и Right, то при изменении размера, компонент будет следовать за нижней границей формы. Это работает, как во время исполнения, так и во время разработки.
0
0 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 8
19.03.2012, 14:00  [ТС]
Лучший ответ Сообщение было отмечено Alsys как решение

Решение

DefineTrueFalse. Спасибо за ответ, все бы ничего, но есть два условия - компоненты создаются в рантайме и могут менять видимость. Не помогает и первоначальное задание более левого(правого) Left, оно не работает, если компоненты отличаются шириной, есть еще и такое условие. Был бы какой-нить AlignOrder...

Решение все же нашлось, вполне удовлетворившее пока. После добавления компонента либо изменения его свойств видимости необходимо вызывать функцию RealignControls (parent - родительская панель) - компоненты будут выстроены в порядке их создания. Мерцаний не замечено.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
void __fastcall TForm1::RealignControls(TWinControl *parent)
{
 TControl *c;
 TAlign align;
 for(int i=0;i<parent->ControlCount;i++)
 {
  c=parent->Controls[i];
  align=c->Align;
  switch(align)
  {
   case alLeft:   c->Left=parent->Width;  break;
   case alRight:  c->Left=0;              break;
   case alTop:    c->Top=parent->Height; break;
   case alBottom: c->Top=0;              break;
 
  }
  c->Align=align;
 }
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2012, 14:00
Помогаю со студенческими работами здесь

Свойство text-align не работает с тэгом b
&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;body&gt; &lt;b style=&quot;text-align:right;&quot;&gt; Цвет цвет &lt;/b&gt; &lt;/body&gt; &lt;/html&gt; Почему по правому краю не...

Anchors, Align и размещение компонентов исходя из размера формы
Сабж. Есть кнопки на форме, в таком виде: Ну и соответственно при разных размерах кнопки должны изменять свой размер и...

Порядок размещения полей в структурах при наследовании
вот к примеру struct A { public int a; public int b; } struct B : A { public int c;

Заменить в каждом нечетном столбце матрицы порядок размещения элементов на противоположный
Задан массив m на n. Заменить в каждом нечетном столбце порядок размещения элементов на противоположный

Организовать вещественные файлы А и В с одинаковым количеством компонентов. Получить файл С, компоненты которого определяются по правилу
Помогите пожалуйста! Организовать вещественные файлы А и В с одинаковым количеством компонентов. Получить файл С, компоненты которого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru