AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ZOrder von Controls ändern

Ein Thema von sakura · begonnen am 26. Mai 2003
Antwort Antwort
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#1

ZOrder von Controls ändern

  Alt 26. Mai 2003, 15:06
Hi, desöfteren wurde bereits nachgefragt, wie sich die Z-Order (Reihenfolge) von Controls ändern läßt.

Im Design-Modus kann dieses einfach durch das Anklicken der entsprechenden Control mit der rechten Maustaste -> entsprechender Menüpunkt geändert werden.

Im Code kann man die Befehle
Delphi-Quellcode:
Control.BringToFront;
Control.SendToBack;
nutzen, aber leider ist es nicht direkt möglich die Control nur um eine Position zu verschieben.

Folgender Code hilft dabei. Der erste Parameter is die Control, welche verschoben werden soll, der zweite bestimmt die Richtung.

Delphi-Quellcode:
procedure ChangeControlZOrder(Sender: TObject; MoveUp: Boolean = True);
var
  I, Curr: Integer;
  Control: TControl;
  List: TList;
begin
  if Sender is TControl then
  begin
    // sender kann z-order ändern
    Control := Sender as TControl;
    // sender ist einer Control (zur Darstellung) zugeordnet
    if Control.Parent = nil then
      // nee
      Exit;
    // position der control ermitteln
    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
      // hm, position nicht gefunden
      Exit;
    List := TList.Create;
    try
      if MoveUp then
      begin
        for I := Curr + 2 to Pred(Control.Parent.ControlCount) do
          // die restlichen controls merken
          List.Add(Control.Parent.Controls[I]);
        // control nach vorne bringen
        Control.BringToFront;
        for I := 0 to Pred(List.Count) do
          // die restlichen controls wieder vorholen
          TControl(List[I]).BringToFront;
      end else
      begin
        for I := 0 to Curr - 2 do
          // die restlichen controls merken
          List.Add(Control.Parent.Controls[I]);
        // control nach vorne bringen
        Control.SendToBack;
        for I := Pred(List.Count) downto 0 do
          // die restlichen controls wieder vorholen
          TControl(List[I]).SendToBack;
      end;
    finally
      List.Free;
    end;
  end;
end;
......

[edit=Matze] Mfg, Matze[/edit]
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz