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]