Вопрос по alignment, tpanel, delphi – Delphi: Как программно настроить визуальное упорядочение компонентов с помощью align = alTop

11

Я получил форму с несколькими панелями, каждая из которых имеет Align = alTop, поэтому они аккуратно складываются сверху страницы.

Однако я хочу динамически изменить порядок внешнего вида этих панелей, то есть перемещать их вверх и вниз. Каков наилучший способ сделать это?

Ваш Ответ

7   ответов
0

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

Благодарю.

1

procedure Show_Hide (Flag_Show : boolean);
begin
  if Flag_Show then
  begin
    with Panel_1 do begin Align := alTop; Visible := true; end;
    with Panel_2 do begin Align := alTop; Visible := true; end;
    with Panel_3 do begin Align := alTop; Visible := true; end;
    with Panel_4 do begin Align := alTop; Visible := true; end;
  end else
  begin
    with Panel_1 do begin Visible := false; Align := alNone; end;
    with Panel_2 do begin Visible := false; Align := alNone; end;
    with Panel_3 do begin Visible := false; Align := alNone; end;
    with Panel_4 do begin Visible := false; Align := alNone; end;
  end;
end;

по моему желанию Panel_1 Panel_2 Panel_3 Panel_4

28

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

Иногда, если вы назначите отрицательное значение, это будет работать лучше. У меня так получилось.
1

и.

Попробуйте это (все панели выровненыaltop а такжеwith the same Height):

PANEL0
ПАНЕЛИ1
panel2
панелью3
PANEL4

ВOnClick событиеall panels сделай это:

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

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

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

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

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

ADDED: Если вы используете Drag & amp; Drop, эти события возвращают позицию (X и Y); Исходное положение и конечное положение позволяют рассчитать верхнюю часть wew для выравнивания по панели.

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

1

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

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

Вы не можете установитьTGridPanel.ParentBackground вTrue? я думалTPanel потомки могут быть прозрачными таким образом ...
Хорошая идея, но мои панели на самом деле не помещаются непосредственно в форму - они находятся на другом подобном панели компоненте, который дает фоновый эффект, и TGridPanel скрывает это. Для простоты я не упомянул эту тонкость ... Roddy
6

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

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

Хорошо, я не знал оDeferWindowPos. But isn't DisableAlign/EnableAlign easier then?
@Ngln, сDeferWindowPosокно фактически не перемещается, пока вы не вызоветеEndDeferWindowPos, Если вы перемещаете много окон, это помогает избежать мерцания, поскольку позиции некоторых окон обновляются до того, как другие переместились. Насколько я могу сказать,DisableAlign не препятствует перемещению элементов управления куда-либо, только принудительное выравнивание родительского элемента. Я не могу судить, что лучше.
1

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

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

Hide the panels Remove the panels from their parent control Add the panels to their parent control in the new order you wish Show the panels

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