Изменить Z-порядок ваших контролов во время выполнения программыDelphi , Компоненты и Классы , RTTIИзменить Z-порядок ваших контролов во время выполнения программы
Оформил: DeeCo { Sometimes you want to change the order of your controls during runtime. Usually you only can send them all the way to the front (Control.BringToFront) or send them all the way back (Control.SendToBack). The following procedure will help you moving a control just one position for or back. This is especially useful when using vector graphis or similar applications. The procedure takes the control to be moved as the first parameter. The direction is the second parameter (True brings the control one step up, False sends it one step back). Internally, this procedure works with SendToBack and BringToFront too, however, it creates an order list first and pushes the other controls as well. } procedure ChangeControlZOrder(Sender: TObject; MoveUp: Boolean = True); var I, Curr: Integer; Control: TControl; List: TList; begin if Sender is TControl then begin // only components of type TControl and descendends // work Control := Sender as TControl; // has no parent, cannot move ;-) if Control.Parent = nil then // quit Exit; // determine position in z-order Curr := -1; for I := 0 to Pred(Control.Parent.ControlCount) do if Control.Parent.Controls[I] = Sender then begin Curr := I; Break; end; if Curr < 0 then // position not found, quit Exit; List := TList.Create; try if MoveUp then begin for I := Curr + 2 to Pred(Control.Parent.ControlCount) do // load other controls in group List.Add(Control.Parent.Controls[I]); Control.BringToFront; for I := 0 to Pred(List.Count) do // move other controls to front, too TControl(List[I]).BringToFront; end else begin for I := 0 to Curr - 2 do // load other controls in group List.Add(Control.Parent.Controls[I]); Control.SendToBack; for I := Pred(List.Count) downto 0 do // move other controls to back, too TControl(List[I]).SendToBack; end; finally List.Free; end; end; end; Перевод контента на русский язык: Это процедура Delphi, которая изменяет порядок Z-очереди управления в реальном времени. Процедура принимает два параметра: Шаг за шагом объясняется, как она работает:
Использование Вот альтернативное решение, которое достигает identical результата без использования
Альтернативное решение использует простой цикл для перемещения других управлений в той же группе, а не загружает их в список. Это может быть более эффективно для больших групп управлений, но может быть менее гибким, если вам нужно выполнить дополнительные операции над элементами списка. В статье описывается процедура ChangeControlZOrder для изменения порядка контролов в программе во время выполнения, которая позволяет перемещать контролы на один шаг вперед или назад. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |