Delphi: Как программно корректироваться, визуальное упорядочивание компонентов с выравниваются = alTop

Если PHP не будет иметь встроенное для этого, Вы не будете в состоянии сделать это в меньше, чем O (n) - перечисляющий по всем ключам и проверяющий на целый тип. На самом деле Вы также хотите удостовериться, что нет никаких дыр, таким образом, Ваш алгоритм мог бы быть похожим:

for i in 0 to len(your_array):
    if not defined(your-array[i]):
        # this is not an array array, it's an associative array :)

, Но почему беспокойство? Просто предположите, что массив имеет тип, который Вы ожидаете. Если это не будет, это просто аварийно завершится в Вашей поверхности - это - динамическое программирование для Вас! Протестируйте свой код, и все будут хорошо...

12
задан Roddy 11 August 2009 в 11:39
поделиться

6 ответов

Вы можете легко переместить панель с выравниванием по верхнему краю наверх, установив для ее свойства Верх значение 0 . Сделайте это в обратном порядке (сначала нижняя панель), и все готово.

30
ответ дан 2 December 2019 в 03:49
поделиться

Переместите их так же, как вы перемещали бы их во время разработки с помощью мыши: установите для свойства Top текущей панели значение на единицу меньше, чем для свойства Top ] свойства панели, которую вы хотите разместить под текущей панелью. Об остальном позаботится VCL.

Если вам нужно переместить несколько панелей, начните с BeginDeferWindowPos . Настройте все панели на любые координаты с помощью DeferWindowPos , а затем заставьте их все перемещаться одновременно с помощью EndDeferWindowPos .

.
6
ответ дан 2 December 2019 в 03:49
поделиться

Как насчет попытки выравнивания по верхнему краю TGridPanel с одним столбцом и n строк вместо этого --- переупорядочение панелей с выравниванием по верхнему краю, на самом деле, немного затруднительно.

(Примечание: TGridPanel доступен в Delphi 2007 и выше, если я правильно помню).

1
ответ дан 2 December 2019 в 03:49
поделиться

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

Попробуйте следующее (все панели выровнены по верху и с одинаковой высотой ):

PANEL0
ПАНЕЛЬ1
ПАНЕЛЬ2
ПАНЕЛЬ3
ПАНЕЛЬ4

В событии OnClick для все панели делают следующее:

 TPanel(Sender).Top := TPanel(Sender).Top - TPanel(Sender).Height - 2;

Если вы щелкаете по панели, она перемещается на одну позицию вверх.

Это идея. Измените верхние X пикселей.
В то же время, если вы сделаете это:

   TPanel(Sender).Top := TPanel(Sender).Top - (TPanel(Sender).Height * 2)- 2; 

Панель вверх на 2 позиции.

ДОБАВЛЕНО: Если вы используете Drag & Drop, эти события возвращают позицию (X и Y); С исходным положением и конечным положением вы можете рассчитать верхнюю точку wew для назначения на панель.

Извините за мой плохой английский. с уважением

1
ответ дан 2 December 2019 в 03:49
поделиться

Я предлагаю создать структуру, в которой вы динамически удаляете / добавляете формы из / в их родительский элемент управления. В целом порядок создания / добавления - это визуальный порядок, но из вашего вопроса я понимаю, что вы хотите, чтобы порядок изменялся в течение срока службы приложения, поэтому простого изменения исходного порядка создания будет недостаточно.

измените порядок, попробуйте:

  1. Скрыть панели
  2. Удалить панели из их родительского элемента управления
  3. Добавить панели в их родительский элемент управления в желаемом новом порядке
  4. Показать панели
1
ответ дан 2 December 2019 в 03:49
поделиться

I know its an old post but basically helped me - the idea of setting the top property to zero. I cant use the idea of programatically set the position cause this is up to the app user - it can chose to display some charts on the app and then, all the panels (parent) of the the teecharts are align altop. I set their top property to 0 on the inverse order and then just set visible true or false according to user input...

Thanks.

0
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: